Systemd 操作

Ubuntu 16.04 淘汰使用 rc.local,改用 systemd 達成開機啟動服務

基本範例

$ nano /etc/systemd/system/my.service
[Unit]

[Service]
ExecStart=/path/script.sh

[Install]
WantedBy=default.target
$ chmod +x /path/script.sh  
$ systemctl daemon-reload
$ systemctl start my.service
$ systemctl enable my.service
如有問題,用 status 查詢後,重新 daemon-reload
$ systemctl status my.service
$ systemctl daemon-reload
重開機,檢查服務是否有啟動成功


.Service Unit 詳解

結構
  • [Unit] 敘述、服務執行相依性
  • [Service]..:實際執行內容 (不同的 Type 會有不同的項目)
  • [Install]:soft link 到哪個 target
[Unit]
Description=    服務說明,list-units 時可看到
Documentation=  服務說明檔
After=          在什麼服務後才啟動,非強制
Before=         在什麼服務前就啟動,非強制
Requires=       將 After、Before 變成強制
Wants=          希望清單,希望後面繼續執行甚麼服務
Conflicts=      衝突清單,此服務後面不可以執行甚麼服務


[Service]
Type=             daemon 啟動的方式
    =simple          啟動後常駐於記憶體中(default)
    =forking         子程序的方式 (simple 方式,父程序在啟動結束後就會終止運作)
    =oneshot         類似 simple,但完成後不常駐
    =dbus            類似 simple,須取 D-Bus 的名稱後,才會繼續運作 (必要參數 BusName)
    =notify          類似 simple,透過 inotify 發送啟動服務的通知
    =idle            類似 simple,所有的工作都順利執行完畢後才會執行。(通常是給開機完成後才執行的服務)
Environment=      環境參數
EnvironmentFile=  環境檔
ExecStartPre=     在 start 之前執行的指令
ExecStart=        腳本程式、指令
ExecStartPost=    在 start 之後執行的指令 
ExecStop=         執行 systemctl stop 的執行的指令
ExecReload=       執行 systemctl reload 的執行的指令
Restart=          如果為 always,會不斷重生
RestartSec= 重生所需耗費時間(秒) RemainAfterExit= 如果為 1,所屬的所有程序都終止之後,此服務會再嘗試啟動。(for Type=oneshot) TimeoutSec= 幾秒後,強制結束 PrivateTmp= 如果為 true,會分配獨立的臨時空間給服務 KillMode= daemon 終止時, =process 只終止主要的程序(ExecStart那串) =control-group 主程序產生的其他 control-group 的程序一起關閉 =none 則沒有程序會被關閉 User= 指定執行的身份(預設root) Group= 指定執行的群組(預設root) UMask=0027 PermissionsStartOnly= 允許使用 User,yes 表示只對 ExecStart 有效,no 表示全部 Exec* 都不可用 [Install] WantedBy=default.target WantedBy= 要掛在哪一個 target unit 底下 Also= 服務 enable 時,要連帶 enable 的其他服務 Alias= 別名,呼叫此名稱等同呼叫這個服務

相關指令

查詢執行 log
$ journalctl -u xxxx.service
列出全部target
$ systemctl list-units --type=target --all
列出清單(link)
$ systemctl list-unit-files --all
列出相依
$ systemctl list-dependencies parse.service
查詢 default.target
$ systemctl get-default
設定 default.target
$ systemctl set-default multi-user.target

target unit

graphical.target:文字+圖形界面,已包含 multi-user.target multi-user.target:純文字模式 shutdown.target:關機的流程 ... 最常用到 multi-user.target、graphical.target,全部的 target 可看到上面指令查詢

參考文獻


Systemd 操作 Systemd 操作 Reviewed by Wild on 1/04/2018 03:40:00 下午 Rating: 5

沒有留言:

沒有Google帳號也可發表意見唷!

技術提供:Blogger.