A maneira como eu rastrei isso é substituir os utilitários halt
e shutdown
por um script.
Primeiro, crie um script como o seguinte em /bin/fakehalt
:
#!/bin/bash
exec >>/tmp/fakehalt.log 2>&1
date
echo "CMD=$0 PID=$$"
ps -ef --forest
echo '========'
Em seguida, instale-o com:
chmod a+x /bin/fakehalt
mv /sbin/halt /sbin/halt.orig
ln -s /bin/fakehalt /sbin/halt
mv /sbin/shutdown /sbin/shutdown.orig
ln -s /bin/fakehalt /sbin/shutdown
Isso criará um arquivo de log em /tmp/fakehalt.log
cada vez que for chamado. Ele registrará o nome que recebeu como ( halt
ou shutdown
) seu próprio PID e, em seguida, um diagrama de árvore de todos os processos no momento.
Isso deve fornecer todas as informações necessárias para rastreá-lo. Basta olhar a árvore ps
e encontrar o que chamamos de script.
/sbin/reboot
deve ser um link simbólico para /sbin/halt
. Se não for, substitua-o também.
Se isso ainda não o capturar, substitua /sbin/init
(como também pode ser usado para reinicializar o sistema). Mas isso é perigoso, como se o sistema fosse reinicializado, não virá corretamente.