1

我想我可以使用这个相关的问题: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 预约

是否有一种简单的方法可以从 bash 包装或调用“启动”脚本并在进程终止时重新启动,或者这是实际调用 PID 文件的情况?

Dang - 即使在指向一个在stackoverflow上没有关闭的非常相似的问题之后,问题也被关闭了。你们真烂

4

2 回答 2

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 轻松停止。

于 2012-10-13T22:58:25.553 回答
1

如果您可以在非守护程序模式下运行该进程,最简单的解决方案是将其包装在脚本中。

#!/bin/bash
while (true)
do
  xmessage "This is your process.  Click OK to kill and respawn"
done

编辑

许多守护进程会留下一个/var/lock包含其 PID 的锁定文件,通常位于 . 这使守护进程的多个副本无法运行。

在 Linux 下,/proc查看该进程是否仍然存在是相当简单的。

在其他平台下,您可能需要玩游戏ps来检查进程是否存在。

于 2012-10-13T22:36:15.893 回答