systemd 中的requires, wants, before, after


man systemd.unit   

man systemd.service

###依賴關系和前后順序
* 依賴關系:Requires和Wants

* 前后順序:After,Before

依賴關系,前后順序是比較容易混淆的,當使用Requires和Wants的時候,

* 如果不搭配After,Before使用,比如:

unit A Requires unit B, 那么A和B會一起啟動,如果B失敗了,A也就失敗了,只有B成功了,A才能成功;

unit A Wants unit B, 那么A和B會一起啟動,如果B失敗了,A也就失敗了,只有B成功了,A才能成功;

* 建議搭配After,Before使用,比如:

unit A Requires unit B, 那么同時最好unit A中寫上:After=B


###unit處理依賴關系:Requires和Wants的區別?
使用systemd時,可通過正確編寫單元配置文件來解決其依賴關系。典型的情況是,單元A要求單元B在A啟動之前運行。在此情況下,向單元A配置文件中的 [Unit] 段添加 Requires=B 和 After=B 即可。若此依賴關系是可選的,可添加 Wants=B 和 After=B。請注意 Wants= 和Requires= 並不意味着 After=,即如果 After= 選項沒有制定,這兩個單元將被並行啟動。
依賴關系通常被用在服務(service)而不是目標(target)上。例如, network.target 一般會被某個配置網絡接口的服務引入,所以,將自定義的單元排在該服務之后即可,因為 network.target 已經啟動。

###unit文件中,服務類型: Type= 參數
編寫自定義的 service 文件時,可以選擇幾種不同的服務啟動方式。啟動方式可通過配置文件 [Service] 段中的 Type= 參數進行設置。

* Type=simple(默認值):systemd認為該服務將立即啟動。服務進程不會fork。如果該服務要啟動其他服務,不要使用此類型啟動,除非該服務是socket激活型。
* Type=forking:systemd認為當該服務進程fork,且父進程退出后服務啟動成功。對於常規的守護進程(daemon),除非你確定此啟動方式無法滿足需求,使用此類型啟動即可。使用此啟動類型應同時指定 PIDFile=,以便systemd能夠跟蹤服務的主進程。
* Type=oneshot:這一選項適用於只執行一項任務、隨后立即退出的服務。可能需要同時設置 RemainAfterExit=yes 使得 systemd 在服務進程退出之后仍然認為服務處於激活狀態。
* Type=notify:與 Type=simple 相同,但約定服務會在就緒后向 systemd 發送一個信號。這一通知的實現由 libsystemd-daemon.so 提供。
* Type=dbus:若以此方式啟動,當指定的 BusName 出現在DBus系統總線上時,systemd認為服務就緒。
* Type=idle: systemd會等待所有任務處理完成后,才開始執行idle類型的單元。其他行為和Type=simple 類似。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM