编写一个bash脚本来重启守护进程

时间:2012-10-13 22:30:24

标签: multithreading bash restart sysadmin

我以为我可以使用这个相关的问题: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上没有关闭的非常类似的问题之后问题也被关闭了。你们吮吸

2 个答案:

答案 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来玩游戏以检查进程是否存在。