阿毛
It's me !
想你所想

Ubuntu18.x 添加自启动任务

项目中,需求希望当开发板上Ubuntu一跑起来,项目和其他基础服务一并跑起来。所以需要通过添加自启动任务。

以运行一条命令为例,未添加自启动时,通过python3 test.py运行一个python服务。现在需要开机自启。

注意,如下步骤需要在root权限下执行,可以先行切换,或者sudo。

自定义自启服务脚本

Ubuntu18.x中,在“ /lib/systemd/system”路径下,新建一个service,如

cd /lib/systemd/system
vim test.service

内容大致如下:

[Unit]
Description=video_capture_moving service 
# 需要当nginx_rtmp.service 服务执行完后,再执行当前服务
After=nginx_rtmp.service

[Service]
# 指定ExecStart命令执行(服务运行)的所在目录
WorkingDirectory=/root/ss/
# 需要自启的命令(服务)
ExecStart=/usr/bin/python3 /root/ss/test.py
Restart=on-failure
RestartSec=50s
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

有几个参数着重强调下,这里我需要这个自定义的test.service在某个服务运行后,再执行,则配置After参数。
test.py中需要需要某些资源在“/root/ss”中,如需要读取“/root/ss”下的一个文件,但是代码中是使用的相对路径“./”,那么如果不配置WorkingDirectory参数,那么运行test.py时就会异常,加载不到所需资源。
ExecStart配置需要运行的shell命令,必须写完整路径,如我的python3在“/usr/bin”下(which python3),那么就必须指明/usr/bin/python3,否则service启动时,会报“Executable path is not absolute”类似错误。这是因为 Ubuntu Systemd需要完整路径,因为它不像您使用终端时那样使用shell。

具体其他脚本参数,这里不一一赘述,可参考:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html

自定义服务脚本后,需要让系统重新加载配置

systemctl daemon-reload

然后设置开机自启

systemctl enable test.service

然后重新启动系统

reboot

为了便于测试,可以直接在自定义服务脚本完成后,就启动服务

systemctl start test.service

然后查看服务运行状态

systemctl status test.service

运行成功如下:

https://file.blog.humh.cn/2020/05/图片-10.png

service貌似在早先的版本上是支持的,这也是Ubuntu早先的设计,在后续版本中,逐步被systemctl所替代。所以通过service完成自启动内容,可能不可行,最好通过systemctl完成。

humh

文章作者

站长本人,一个憨批!

发表回复

textsms
account_circle
email

想你所想

Ubuntu18.x 添加自启动任务
项目中,需求希望当开发板上Ubuntu一跑起来,项目和其他基础服务一并跑起来。所以需要通过添加自启动任务。 以运行一条命令为例,未添加自启动时,通过python3 test.py运行一个python…
扫描二维码继续阅读
2020-05-09