我有一个问题,关于如何在启动完成后立即启动用 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 为我指明正确的方向。