繼上次針對(duì)我司IAC-IMX8MP-Kit Yocto系統(tǒng)上Systemd的簡介,這篇文章主要分析一下關(guān)于Service的一些關(guān)鍵屬性,幫助大家更好的了解Systemd最重要的單元,更好的控制自己的服務(wù)。

這里以一個(gè)客戶的具體需求為例:自啟動(dòng)Qt應(yīng)用,能夠盡快的啟動(dòng)。這里貼上完整的service屬性,依據(jù)對(duì)應(yīng)屬性詳細(xì)分析,如下圖所示:

總共分為三個(gè)單元,Unit、Service、Install。其中Unit單元的Description屬性是對(duì)服務(wù)的描述,主要顯示在服務(wù)啟動(dòng)時(shí)的表述,如下圖所示。
?
After屬性主要是為了限制當(dāng)前服務(wù)地啟動(dòng)順序,這也是相比較傳統(tǒng)init.d啟動(dòng)的優(yōu)勢(shì)之一,需求是自啟動(dòng)Qt,那么需要在服務(wù)框架之后啟動(dòng),所以在weston.service之后。
Service單元是我們?nèi)蝿?wù)的執(zhí)行單元,默認(rèn)給予了很多屬性可以配置,這里我們主要看一下第一張圖中的幾個(gè)屬性,Environment屬性是給予任務(wù)執(zhí)行時(shí)附加的環(huán)境變量,這里為了讓Qt成功運(yùn)行,附加了XDG的運(yùn)行目錄和QT的運(yùn)行平臺(tái),而Type屬性是任務(wù)的啟動(dòng)方式,目前有oneshot、simple、forking三種,這里比較重要,單獨(dú)介紹。
Oneshot適用于一次性完成的配置、設(shè)置的屬性等,systemd會(huì)始終阻塞等待相應(yīng)動(dòng)作的完成,判斷服務(wù)啟動(dòng)成功。如果在這里用來啟動(dòng)一個(gè)常駐的應(yīng)用,那么啟動(dòng)的應(yīng)用將會(huì)一直阻塞在那里,systemd會(huì)認(rèn)為該服務(wù)一直在啟動(dòng)中,在等待一定時(shí)間后(往往是90s)會(huì)結(jié)束掉這個(gè)服務(wù),服務(wù)啟動(dòng)失敗。
Simple是最常用的配置,會(huì)正常啟動(dòng)進(jìn)程,并且啟動(dòng)的應(yīng)用會(huì)被自動(dòng)放入后臺(tái)常駐,非常適用于啟動(dòng)某些后臺(tái)檢測(cè)腳本以及應(yīng)用程序等,但這里也要注意的是,當(dāng)它啟動(dòng)的是一個(gè)腳本時(shí),systemd的監(jiān)控是針對(duì)腳本進(jìn)程的,而對(duì)于其中的應(yīng)用程序等則可能忽略掉相關(guān)信息,這里推薦是使用exec命令啟動(dòng)程序。
Forking屬于老舊的配置,目前只有極少數(shù)服務(wù)采用這種配置。Forking適用于多進(jìn)程的程序,當(dāng)啟動(dòng)的父進(jìn)程退出,子進(jìn)程完全啟動(dòng)的時(shí)候,systemd認(rèn)為服務(wù)啟動(dòng)成功。所以它并不適合用作在腳本里啟動(dòng)一個(gè)常駐進(jìn)程。當(dāng)它啟動(dòng)一個(gè)腳本,那么腳本將作為主進(jìn)程,腳本里啟動(dòng)的常駐應(yīng)用將作為子進(jìn)程啟動(dòng),而該子進(jìn)程因?yàn)槭浅qv應(yīng)用,將會(huì)阻塞父進(jìn)程退出,導(dǎo)致systemd認(rèn)為該服務(wù)一直在啟動(dòng)中,超過一定時(shí)間(往往是90s)后,會(huì)自動(dòng)結(jié)束該服務(wù),導(dǎo)致應(yīng)用啟動(dòng)失敗。
接下來是ExecStart屬性,該屬性主要用于執(zhí)行動(dòng)作,用于執(zhí)行后面的應(yīng)用程序,腳本等,需要注意的是,應(yīng)用程序需要絕對(duì)路徑啟動(dòng),而腳本是新的腳本解釋器去運(yùn)行,注意環(huán)境變量,以及相關(guān)腳本變量。
最后是Install單元,該單元主要是跟開機(jī)自啟動(dòng)有關(guān)系,其中WantedBy屬性簡單來說便是依賴,當(dāng)用戶執(zhí)行systemctl enable xxx.service的時(shí)候,systemd會(huì)自動(dòng)創(chuàng)建軟鏈接到WantedBy的指定目標(biāo)單元下,意味著該服務(wù)會(huì)隨著目標(biāo)單元激活而自動(dòng)啟動(dòng)。像第一張圖中的multi-user.target,意味著當(dāng)系統(tǒng)進(jìn)入多用戶模式時(shí),該服務(wù)會(huì)自動(dòng)啟動(dòng)。
-
嵌入式
+關(guān)注
關(guān)注
5189文章
20192瀏覽量
329571 -
imx8
+關(guān)注
關(guān)注
3文章
42瀏覽量
50723
發(fā)布評(píng)論請(qǐng)先 登錄
Linux使用Systemd管理進(jìn)程服務(wù)
Linux使用Systemd管理進(jìn)程服務(wù)
如何在 Linux 上從 NetworkManager 切換為 systemd
【Intel Edison試用體驗(yàn)】嚴(yán)肅臉試用5——從SSH無法連接到systemd
systemd定時(shí)器的基本操作方法
i.M8XMQ開發(fā)板如何通過Systemd服務(wù)實(shí)現(xiàn)應(yīng)用自啟
如何將imx8mpevk板的默認(rèn)Systemd - Init Manager更改為Sysvinit?
Systemd 又遭背鍋:創(chuàng)建 Devuan 是為了保證 Linux 的穩(wěn)定性
Linux系統(tǒng)與服務(wù)管理工具Systemd被曝存在3大漏洞
走進(jìn)Linux之systemd啟動(dòng)過程
Linux項(xiàng)目開發(fā),你必須了解Systemd服務(wù)!
Systemd是什么?Systemd Service配置文件詳解
systemd journal收集日志的三種方式
【技術(shù)分享】正確編寫SysV Init腳本以實(shí)現(xiàn)Systemd兼容(上)
【技術(shù)分享】Systemd原生服務(wù)配置最佳實(shí)踐(下)

技術(shù)分享| 什么是Systemd
評(píng)論