Answers:
似乎您正在寻找Ubuntu中已提供的Upstart功能。respawn
配置中的节将完全满足您的需求。我建议不要使用不太标准的方式来处理此问题。
如果没有有关您要尝试管理的流程的更多详细信息,那么很难说出配置的外观。例如,它取决于是否分叉并将其置于后台。该respawn
节上的Upstart文档应为您提供更多信息。
不幸的是,尚无法正确运行User Jobs:无法获得新手来运行User Job
假设我们要保持计算器应用程序运行,即使它被大火杀死(信号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计划,这将更加优雅。
servicename.conf
必须与要启动的命令匹配start servicename
。我怀疑您选择了其他名称。
一个无需配置即可实现相同效果的极其简单的工具是immortal
:https : //immortal.run/
只需执行以下命令:
immortal <cmd>
它将在后台运行,如果退出将自动重启。
immortalctl
:查看正在运行的作业的状态。name
此处将打印一列,您可以使用此列和其他控制命令来引用作业。immortalctl stop <name>
:停止监视具有给定名称的作业(该作业不会自动重新启动,但是当前进程将继续执行)immortalctl -k <name>
:将SIGKILL发送到当前进程。immortalctl exit <name>
:停止监视具有给定名称的作业,并将其从作业列表中删除。stdout
,并stderr
在前台?
immortalctl -l out.log <cmd> && tail -f out.log
来达到相同的效果。
如果您不需要守护程序/服务/后台进程功能,而只想在控制台中执行此操作,则创建一个名为的文件autorestart.sh
:
#!/bin/bash
while [ 1 ]; do
some_command
done
然后,如果退出或崩溃,./autorestart.sh
它将自动重新启动some_command
。CTRL-C中断循环并干净地退出程序。
在Ubuntu 18.04上测试。
ps-watcher是一种工具,用于监视正在运行的进程并在定义的情况下执行操作。让我们安装它:
apt-get install ps-watcher
有关详细信息,请参见运行HHVM并回退到PHP-FPM的底部-这对我来说效果很好。
从Ubuntu 15.04开始,启动和重生过程由“ systemd”管理,可以在此处找到很好的介绍。
可以开始使用的示例
https://www.devdungeon.com/content/creating-systemd-service-files
这种方法取代了基于/ etc / inittab和upstart的旧方法。