是否有一个 shell 工具可以接受任意可执行文件并将其创建为可检测、可重启的后台进程?
如果我必须自己编写脚本,我会使用$PIDFILE
类似的方法...
if [ -f $PIDFILE ] && ps -p `cat $PIDFILE` &> /dev/null; then
# Already running, kill, restart
else
# Stale pidfile, start
fi
这听起来好像有一个程序比我能想到的任何程序都要好一千倍。有吗?
如果没有,那么在执行上述脚本时我应该注意哪些注意事项和陷阱?
答案1
在 Debian 系统上有start-stop-daemon
。我建议使用它,如果你不是在 Debian 或 Ubuntu 上,只需从 Debian 复制该脚本并尝试一下。
答案2
如果您想在 shell 脚本中执行此操作,则可以使用子 shell 并执行以下操作:
#!/bin/bash
(
while true; do
echo "I'm process A"
sleep 1
done
) &
(
while true; do
echo "I'm process B"
sleep 3
done
) &
wait
wait
括号中的命令在后台运行,因为如果使用 & 符号和 wait 命令,则确保父脚本不会退出。可以通过$!
在每个子 shell 之后保存来保存子 shell 的 pid。
答案3
历史上,这种进程监控是由init
程序完成的。如今,init
可能已被您的操作系统替换为以下几种建议的替代方案之一:upstart
、systemd
、launchd
(请参阅http://en.wikipedia.org/wiki/Init(查看更长的列表)。检查您的操作系统使用哪些来查看它如何创建和监控长时间运行的进程。