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

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

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

技術分享| 什么是Systemd
評論