Answers:
默认情况下,Ubuntu 15.04及更高版本使用一种称为的东西systemd
,它是一种程序(可以自动执行启动服务和过程)。您可以自己制作并将其添加到启动服务列表中,而无需付出任何努力。
基本系统服务
这是一个准系统.service
文件,可用于启动我的python gui服务器(本来可以是Shell脚本,没关系):
[Unit]
Description=Python GUI Server
[Service]
ExecStart=/home/pi/software/GUI_POE.py &
[Install]
WantedBy=multi-user.target
该Description
选项是描述服务内容或功能的任何字符串。
该ExecStart
选项指定要执行的命令。在这里,我给出了一个可执行的python脚本的路径,并使用&
令牌在后台运行它。
该WantedBy
选项根据目标想要使用此服务来指定优先级。如果您不需要在任何特定时间运行服务,只需将其设置为即可multi-user.target
。
基本程序
使用nano
或选择任何编辑器编写您希望在启动时运行的脚本。确保在文件的最顶部包含适当的shebang(#!/bin/bash
用于bash脚本),并使用授予其可执行权限chmod
。
只需将服务写入名为my_service.service的文件,然后使用将其复制到正确的目录中cp my_service.service /lib/systemd/system/
。
开始服务:sudo systemctl start my_service.service
。这将启动您告诉您的服务运行的任何脚本。使用“停止”而不是启动的相同命令将其关闭。
将您的服务添加到启动过程中:sudo systemctl enable my_service.service
。要删除它,只需在同一命令中将“启用”替换为“禁用”即可。
就是这样!请记住,您的脚本将自动以root权限运行,这是systemd服务中的默认设置。
我的简单例子(完整)
作为参考,这是我使用的一个简单的systemd服务,该服务使用Dash启动一个简单的Python GUI Server:
[Unit]
Description=Python GUI Server
After=network-online.target
[Service]
Type=simple
WorkingDirectory=/home/pi/software
ExecStart=/home/pi/software/GUI_POE.py &
Restart=always
RestartSec=15s
KillMode=process
TimeoutSec=infinity
User=pi
Group=pi
[Install]
WantedBy=multi-user.target
此示例服务使用Python3脚本,但是公式与Shell脚本完全相同。
可以在DigitalOcean的这本出色的教程中找到进一步的阅读信息,并且该AskUbuntu线程提供了一个出色的答案,可以帮助我学习systemd。希望这可以帮助!