Ubuntu 16.04 Программа, работающая под экраном, часто дает сбой, и мне часто приходится перезагружаться вручную. Как настроить автоматический перезапуск 3 раза в день. (Я имею в виду crontab, чтобы закрыть его и запустить снова)
Спасибо
Вам нужно где-то сохранить PID работающего процесса при его запуске, а затем, если он все еще работает, отправить процессу сигнал SIGTERM и дождаться его завершения. Приведенный ниже скрипт выполнит эти действия.
PROGRAM=/bin/someProgram
PIDFILE=/var/run/someProgram.pid
if [ -f $PIDFILE ]; then
PID = $(cat $PIDFILE)
if [ -d /proc/$PID ] && [ "$(readlink -f /proc/$PID/exe)" == "$PROGRAM" ]; then
echo -n "Shutting down..."
kill $PID
wait $PID
echo "done."
else
echo "PID not found, program already terminated."
fi
rm $PIDFILE
fi
echo -n "Starting..."
$PROGRAM &
echo $! > $PIDFILE
echo "done."
Затем просто запланируйте выполнение этого в cron каждые X часов.
Решение HostFission хорошее, но если вы не хотите проверять, запущена ли программа, вы также можете убить ее и запустить вот так:
Создайте файл bash с любым именем (, например :restart.sh ), и введите это:
#/bin/bash
/usr/bin/screen -SX NameOfTheScreen quit;
/usr/bin/screen -S NameOfTheScreen /path/to/startscript;
-S устанавливает имя сеанса -X выполняет что-то в сеансе
Не используйте имя -S -X, так как это присвоит сеансу имя -X. Вместо этого используйте имя -SX.
Затем вы можете настроить -crontab на выполнение этого файла столько раз, сколько вы хотите в течение дня.
crontab -e
* 3,6,9,12,15,18,21,0 * * * /path/to/restart.sh >> /path/to/logfile