ubuntu下自启动服务,习惯了在rc.local添加,而在ubuntu 18.04系统下,已经没有了irc.local。从18.04开始,Ubuntu发行版本已经使用systemd来启动服务,不再使用initd。刚好用到,于是就静下来看了下systemd启动的过程。
废话不多,下面是启动自己程序的步骤:
1. 添加/etc/systemd/system/myapp.service服务,内容如下:
[Unit]
Description=user app
# Requires=serial-getty@ttyGS0.service #添加自己程序的依赖
#After=networking.service
[Service]
type=forking
ExecStart=/bin/bash /root/app.sh # 用户的服务脚本
[Install]
WantedBy=multi-user.target
2.在/root/app.sh增加自己的服务,并增加执行权限,sudo chmod a+x /root/app.sh
note:因为启动该服务时,系统环境还未初始化,所以脚本中自己手动添加所有需要的系统环境,
如:LD_LIBRARY_PATH,PATH等。
3.使能服务
#systemctl enable myapp
重启系统就会自动执行/root/app.sh
-----------------------------------------------------------------------------------------------------------------------
note:1.Ubuntu中,服务分别放在两个位置,/etc/systemd/system/ 和/lib/systemd/system/ 。
前者是用户定义的服务居多,后者系统服务居多。
2.myapp.service中 [Unit]..类似字段要注意首字母大写,之前看了有些文章没有大写,测试时不满足语法,无法启动服务。
测试语法是否正确方法:# systemctl reload myapp.service, #systemctl enable myapp.service
3.需要做rootfs的,可以直接建立软连接人间代替 systemctl enable xxx 命令
执行过该命令的应该可以看到,该命令实质上就是在/etc/systemd/system/multi-user.target.wants/ 下建立了一个同名软连接。 “multi-user.target.wants”这里与服务中install内容对应。