在根环境中启动应用程序,然后监视,如果关闭或崩溃则重新启动

在根环境中启动应用程序,然后监视,如果关闭或崩溃则重新启动

我有一个问题,关于如何在启动完成后立即启动用 python 编写的应用程序。此应用程序需要以完全权限运行,这样就不需要密码了,因为它有两个使用 sudo 运行的命令。

如果应用程序关闭,我还需要以相同的权限重新启动该应用程序。

我做过类似的事情,但从来没有一起做过。例如,在启动时启动。我会在另一个目录中(在 init.d 目录中)放置一个调用我想要的应用程序的简短脚本。然后通过执行“update-rc.d app defaults”,它将作为 Ubuntu 启动脚本的一部分自动启动

如果程序崩溃,则重新启动另一个简单脚本

#!/usr/bin/python
from subprocess import Popen
import sys

filename = sys.argv[1]
while True:
    print("\nStarting " + filename)
    p = Popen("python " + filename, shell=True)
    p.wait()

完成任务。我可以在 filename 处插入应用程序名称,这样在调用它时就不必将其作为参数的一部分提供。

我的主要问题是我正在运行的应用程序需要在根环境中运行,在启动时自动启动,并在关闭时重新启动。

有什么建议么?

答案1

因此,在 Glenn Jackman 的建议下,我开始花更多时间研究 upstart/systemd。我最终研究了 systemd,并弄清楚了我在寻找的很多方面。

其中一个问题是,到目前为止,我需要在 root 环境中运行该软件,因为我使用的一些供应商软件需要它。看来,当您使用 systemd 设置服务时,所有内容都以 root 权限运行。所以这解决了我的一个问题。

至于在启动时启动和管理软件的任何关闭,它由一个非常简单的单元文件处理,位于 /lib/systemd/system/app.service

[Unit]
Description=this does something
WantedBy=multi-user.target

[Service]
exec executes my app
Restart
RestartSec

[Install]
wantedBy=multi-user.target

接下来我通过使用 systemctl 启用了新服务

sudo systemctl enable app.service
sudo systemctl daemon.reload
sudo systemctl start app.service

这可以在启动时启动,并立即进行测试。

再次感谢 Glenn 为我指明正确的方向。

相关内容