Existem várias possibilidades (algumas mencionadas em outras respostas):
- Um cronjob de sistema ou usuário sendo executado com frequência,
- No init do SysV, uma entrada
/etc/inittab
para o serviço com a diretivarespawn
, - No systemd, um arquivo de unidade com a opção
Restart
definida como um valor diferente deno
, - No Upstart, um arquivo de configuração de serviço com a diretiva
respawn
, - Uma ferramenta de monitoramento de processos, como
monit
, ou - Um processo de watchdog ad-hoc para esse serviço específico.
Uma nova ferramenta interessante (apenas para Linux) que poderia fornecer mais informações sobre onde o processo está sendo iniciado é sysdig .
O Sysdig usa os recursos de ponto de rastreio do Kernel Linux para fornecer o que equivale a um strace
rápido e abrangente do sistema.
Por exemplo, se eu quisesse ver cada processo iniciando ls
, posso emitir:
sudo sysdig evt.type=execve and evt.arg.exe=ls
Quando ls
é executado em algum lugar, recebo uma mensagem como esta:
245490 16:53:54.090856066 3 ls (10053) < execve res=0 exe=ls args=--color=auto. tid=10053(ls) pid=10053(ls) ptid=9204(bash) cwd=/home/steved fdlimit=1024 pgft_maj=0 pgft_min=37 vm_size=412 vm_rss=4 vm_swap=0 env=...
Eu trunquei as informações do ambiente retornadas, mas como você pode ver, no ptid eu posso ver o nome e o pid do programa chamando execve. execve
é a chamada do sistema usada no Linux usada para executar novos comandos (todas as outras chamadas exec são apenas frontends para execve).