Назад | Перейти на главную страницу

Bash Script продолжает возрождаться после того, как должен умереть

#!/bin/bash
PID=$(pidof daemon)
kill $PID
while ps -e | grep "[d]aemon" >> /dev/null; 
do
sleep 30
done
sh -c /root/daemon

Этот сценарий настроен на задание cron для завершения и перезапуска этой программы. Он делает это, но затем после завершения работы сценария он продолжает возрождаться, что очень затрудняет сохранение демона вручную. Он должен перезапустить программу в подоболочке, и сценарий должен умереть.

Я думаю, проблема в вашей cron

* 3,7,10,14,18,23 * * * /root/restartdaemon.sh

Первый * - это минуты, что означает запуск сценария в 3:00, затем снова в 3:01, 3:02 и так далее.

Пытаться

0 3,7,10,14,18,23 * * * /root/restartdaemon.sh

Это запустит его в 3:00, затем снова в 7:00 и так далее.

Хорошо, я думаю, что настоящая проблема в том, что когда вы выполняете "sh -c / root / daemon", ваш скрипт не вернется, пока эта команда не вернется.

Если вы действительно пытаетесь запустить / root / daemon, а затем вернуть сценарий restartdaemon.sh, вы должны сделать что-то вроде:

sh -c / root / daemon &

Таким образом, ваш сценарий перезапуска немедленно вернется, а не будет ждать возврата команды / root / daemon.

Конечно, это будет означать, что когда ваше следующее задание cron убьет демон, он должен «вернуться», а затем ваш скрипт завершит работу, поэтому это не объясняет, почему тысячи все еще работают в памяти, но, по крайней мере, это начало :)