如何自动重启 screen -x 程序?

如何自动重启 screen -x 程序?

Ubuntu 16.04 屏幕下运行的程序经常崩溃,经常需要手动重启。如何设置每天自动重启3次。 (我的意思是 crontab 关闭它并再次运行)

谢谢

答案1

HostFission的解决方案很好,但如果你不想检查程序是否正在运行,你也可以杀死它并启动它,如下所示:

创建一个具有任意名称的 bash 文件(例如:restart.sh)并输入以下内容:

#/bin/bash

/usr/bin/screen -SX NameOfTheScreen 退出;

/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

答案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 小时运行一次。

相关内容