Как автоматически перезапустить программу screen -x?

Ubuntu 16.04 Программа, работающая под экраном, часто дает сбой, и мне часто приходится перезагружаться вручную. Как настроить автоматический перезапуск 3 раза в день. (Я имею в виду crontab, чтобы закрыть его и запустить снова)

Спасибо

0
09.03.2019, 16:46
2 ответа

Вам нужно где-то сохранить 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 часов.

0
28.01.2020, 02:45

Решение 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

1
28.01.2020, 02:45

Теги

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