Systemd作為Linux系統(tǒng)默認(rèn)的初始化系統(tǒng)和服務(wù)管理器,憑借其并行啟動(dòng)、依賴管理及統(tǒng)一配置機(jī)制,顯著提升了系統(tǒng)啟動(dòng)效率。針對開機(jī)自啟動(dòng)需求,Systemd的實(shí)現(xiàn)機(jī)制如下:
?
1、服務(wù)單元機(jī)制
Systemd將每個(gè)服務(wù)/腳本抽象為.service單元文件,其中包含啟動(dòng)命令、依賴關(guān)系、運(yùn)行環(huán)境等聲明式配置。
2、依賴控制與目標(biāo)綁定
通過[Install]段的WantedBy=multi-user.target將服務(wù)關(guān)聯(lián)到系統(tǒng)運(yùn)行目標(biāo),確保在操作系統(tǒng)完成基礎(chǔ)初始化后自動(dòng)觸發(fā)服務(wù)啟動(dòng)。
3、強(qiáng)一致性保障
Systemd會監(jiān)控服務(wù)進(jìn)程,支持自動(dòng)重啟和日志收集,確保自啟動(dòng)服務(wù)的持續(xù)可用性。
腳本自啟
1、首先創(chuàng)建test1.sh腳本
root@elf2-desktop:~# cd /home/elf/root@elf2-desktop:/home/elf# vi test1.sh
?
添加以下內(nèi)容:
echo?"start"?>> /home/elf/c.txt
?
2、給腳本可執(zhí)行權(quán)限
root@elf2-desktop:/home/elf# chmod 777 test1.sh
?
3、新建要啟動(dòng)的服務(wù)文件
創(chuàng)建并編輯test1.service文件
root-desktop:/home/elf# vi?/etc/systemd/system/test1.service
?
在test1.service里編輯以下內(nèi)容
[Unit]Description=/etc/rc.local CompatibilityAfter=multi-user.target[Service]Type=forkingExecStart=/home/elf/test1.sh[Install]WantedBy=multi-user.target
?
4、讓系統(tǒng)獲取到自定義的service文件并設(shè)置開機(jī)啟動(dòng)
root@elf2-desktop:/home/elf# systemctl daemon-reloadroot@elf2-desktop:/home/elf# systemctl enable test1.service
?
5、執(zhí)行sync后,reboot重啟
root@elf2-desktop:/home/elf# syncroot@elf2-desktop:/home/elf# reboot
?
6、驗(yàn)證
root@elf2-desktop:~# cat?/home/elf/c.txt?start??//讀取文件的內(nèi)容,出現(xiàn)start說明腳本開機(jī)自啟成功。
1、首先創(chuàng)建test2.sh腳本
root@elf2-desktop:~# cd /home/elf/root@elf2-desktop:/home/elf# vi test2.sh
?
以HelloWorld為例進(jìn)行測試,添加以下內(nèi)容:
sleep?3export?DISPLAY=:0.0/home/elf/HelloWorld &
sleep 3的原因?yàn)閙ulti-user啟動(dòng)順序較早,不添加sleep參數(shù)會導(dǎo)致應(yīng)用啟動(dòng)失敗,Ubuntu系統(tǒng)啟動(dòng)過程中,用戶帶界面的應(yīng)用啟動(dòng)需要等待界面組件準(zhǔn)備完成,這里測試elf2需要2秒左右正常進(jìn)入系統(tǒng),所以延時(shí)3s再啟動(dòng)應(yīng)用。
?
2、給腳本可執(zhí)行權(quán)限
root@elf2-desktop:/home/elf# chmod 777 test2.sh
?
3、新建要啟動(dòng)的服務(wù)文件
創(chuàng)建并編輯test2.service文件
root-desktop:/home/elf# vi?/etc/systemd/system/test2.service
?
在start.service里編輯以下內(nèi)容
[Unit]Description=/etc/rc.local CompatibilityAfter=multi-user.target[Service]Type=forking?ExecStart=sudo -u elf /home/elf/test2.sh[Install]WantedBy=multi-user.target
?
4、讓系統(tǒng)獲取到自定義的service文件并設(shè)置開機(jī)啟動(dòng)
root@elf2-desktop:/home/elf# systemctl daemon-reloadroot@elf2-desktop:/home/elf# systemctl enable test2.service
?
5、執(zhí)行sync后,reboot重啟
root@elf2-desktop:/home/elf# syncroot@elf2-desktop:/home/elf# reboot
?
6、驗(yàn)證

?
界面配置帶界面應(yīng)用自啟
通過 gnome-session-properties 命令可以打開開機(jī)自啟工程配置界面,在這里添加用戶自己的應(yīng)用/腳本即可,下述以HelloWorld為例進(jìn)行測試。
?
1、調(diào)試串口執(zhí)行命令
elf@elf2-desktop:~$?export?DISPLAY=:0.0elf@elf2-desktop:~$?gnome-session-properties
?
此時(shí)板端會出現(xiàn)如下界面:

?
選擇Add添加自己的啟動(dòng)腳本


選擇添加后按提示保存退出即可。
?
2、添加的test3.sh腳本內(nèi)容如下:
export?DISPLAY=:0.0/home/elf/HelloWorld &
?
4、sync保存重啟,驗(yàn)證是否自啟動(dòng)

?
運(yùn)行應(yīng)用時(shí)隱藏側(cè)邊欄

?

