答案1
此答案适用于带有 Upstart 的 Ubuntu 版本(<= 14.10)。对于带有 Systemd 的版本(>= 15.04),请使用另一种方法。
看来你正在寻找 Ubuntu 中已经提供的功能暴发户。respawn
配置中的节将完全满足您的需要。我建议不要使用不太标准的方式来处理这个问题。
如果没有关于您尝试使用它来管理的进程的更多详细信息,很难说配置应该是什么样子。例如,这取决于它是否分叉并将自身置于后台。Upstart 文档中关于该respawn
节的说明应该会给你更多的信息。
不幸的是,目前还无法正确运行用户作业:无法让 upstart 运行用户作业
例子
假设我们想让计算器应用程序保持运行,即使它被火烧死了(信号 9)。
创建配置文件
/etc/init/calculator.conf
(基于本文):#!upstart description "Calculator" # Start job via the daemon control script. Replace "gert" with your username. exec su -l gert -c 'export DISPLAY=:0; /usr/bin/gnome-calculator' # Restart the process if it dies with a signal # or exit code not given by the 'normal exit' stanza. respawn # Give up if restart occurs 10 times in 90 seconds. respawn limit 10 90
通过运行来启动
sudo start calculator
它在您当前显示屏上打开(
:0
),关闭后重新启动即可欣赏其美妙效果。识别进程 ID,例如通过执行以下操作
ps aux | grep calculator
:gert 13695 0.2 0.4 349744 16460 ? Sl 13:38 0:00 /usr/bin/gnome-calculator
用火杀死它。
sudo kill -9 13695
观看它再次出现:
gert 16059 4.6 0.4 349736 16448 ? Sl 13:40 0:00 /usr/bin/gnome-calculator
请注意,如果 Ubuntu 13.04 计划具有适当的用户作业支持,那么这将更加优雅。
答案2
一个无需配置就能达到相同效果的极其简单的工具是immortal
:https://immortal.run/
只需执行如下命令:
immortal <cmd>
它将在后台运行,如果退出则自动重新启动。
immortalctl
:查看正在运行的作业的状态。name
这里会打印一列,您可以使用它来引用其他控制命令中的作业。immortalctl stop <name>
:停止监控给定名称的作业(不会自动重新启动,但当前进程将继续执行)immortalctl -k <name>
:向当前进程发送SIGKILL。immortalctl exit <name>
:停止监控具有给定名称的作业并将其从作业列表中删除。
答案3
从 Ubuntu 15.04 开始,启动和重生过程由“systemd”管理,可以在这里找到很好的介绍
可从以下网址获取入门示例
https://www.devdungeon.com/content/creating-systemd-service-files
这种方法取代了基于 /etc/inittab 和 upstart 的旧方法。
答案4
有一种方法可以不使用“Upstart”。关键字是“inittab” :-)。尽管该文件通常不会从默认文件进行更改,但它可用于在 SYSV 机器上实现所需的重生。