具有重新加载功能的单实例后台进程

具有重新加载功能的单实例后台进程

是否有一个 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可能已被您的操作系统替换为以下几种建议的替代方案之一:upstartsystemdlaunchd(请参阅http://en.wikipedia.org/wiki/Init(查看更长的列表)。检查您的操作系统使用哪些来查看它如何创建和监控长时间运行的进程。

相关内容