ubuntu下自啟動服務,習慣了在rc.local添加,而在ubuntu 18.04系統下,已經沒有了irc.local。從18.04開始,Ubuntu發行版本已經使用systemd來啟動服務,不再使用initd。剛好用到,于是就靜下來看了下systemd啟動的過程。
廢話不多,下面是啟動自己程式的步驟:
1. 添加/etc/systemd/system/myapp.service服務,内容如下:
[Unit]
Description=user app
# [email protected] #添加自己程式的依賴
#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内容對應。