我以为我可以使用这个相关的问题:How Do I write a bash script to restart a process if it dies。 @lhunath有一个很好的答案并且告诉我我可能做的一切都是错的,但是我正在重新启动一个守护进程,如果我希望我可以在一个单独的脚本中执行某些操作。
我的进程以启动脚本开始,该脚本显示启动日志,但随后退出并使进程离开shell:
>sudo ./start
R CMD Rserve --RS-conf /var/FastRWeb/code/rserve.conf --vanilla --no-save
...
Loading required package: FastRWeb
FastRWeb: TRUE
Loading data...
Rserv started in daemon mode.
>
该过程已启动并正在运行,
ps -ale | grep Rserve 1 S 33 16534 1 0 80 0 - 60022 poll_s? 00:00:00 Rserve
是否有一种简单的方法可以从bash中包装或调用'start'脚本并在进程终止时重新启动,或者这是实际调用PID文件的情况?
Dang - 即使在指向一个在stackoverflow上没有关闭的非常类似的问题之后问题也被关闭了。你们吮吸答案 0 :(得分:2)
监视程序的一种非常简单的方法是使用cron:如果程序仍处于活动状态,则每分钟(或左右)检查一次,否则./start
。
以root用户身份调用crontab -e
。
附加一行:
* * * * * if ! pidof Rserve 2>&1 >/dev/null; then /full/path/to/start; fi
此方法将保持持久性,即,它将在重新启动后执行等。如果这不是您想要的,请将其移至shell脚本:
#! /bin/bash
# monitor.sh
while true; do
if ! pidof Rserve 2>&1 >/dev/null; then /full/path/to/start; fi
sleep 10
done
此脚本必须从命令行手动启动,并且可以使用Ctrl-C轻松停止。
答案 1 :(得分:1)
最简单的解决方案,如果您可以运行该进程是NON-daemon模式,则将其包装在脚本中。
#!/bin/bash
while (true)
do
xmessage "This is your process. Click OK to kill and respawn"
done
修改强>
许多守护人员都会在/var/lock
中留下一个包含其PID的锁文件。这样可以防止多个deamon副本运行。
在Linux下,查看throgh /proc
并查看该进程是否仍然存在非常简单。
在其他平台下,您可能需要使用ps
来玩游戏以检查进程是否存在。