![如何自动重启 screen -x 程序?](https://linux22.com/image/116719/%E5%A6%82%E4%BD%95%E8%87%AA%E5%8A%A8%E9%87%8D%E5%90%AF%20screen%20-x%20%E7%A8%8B%E5%BA%8F%EF%BC%9F.png)
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 小时运行一次。