Сценарий Bash продолжает повторно метать икру после того, как он должен будет умереть

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

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

0
задан 2 September 2014 в 03:29
2 ответа

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

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

sh -c /root/daemon &

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

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

.
0
ответ дан 4 December 2019 в 17:12

Я думаю, что проблема в вашем 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 и так далее.

1
ответ дан 4 December 2019 в 17:12

Теги

Похожие вопросы