2021-05-12 14:32:11
systemctl啟動服務指令碼編寫使用
CentOS 7的服務systemctl指令碼存放在:/usr/lib/systemd/,有系統(system)和使用者(user)之分,像需要開機不登陸就能執行的程式,還是存在系統服務裡吧,即:/usr/lib/systemd/system目錄下
[Unit]
Description=MonitorJSCloud
After=network.service
[Service]
Type=simple
ExecStart=/usr/bin/Python/root/test/ping_test.py
Restart=always
RestartSec=10
PrivateTmp=true
[Install]
WantedBy=multi-user.target
對於那些支援 Systemd 的軟體,安裝的時候,會自動在/usr/lib/systemd/system目錄新增一個組態檔。
systemctl enable httpd
上面的命令相當於在 /etc/systemd/system 目錄新增一個符號連結,指向 /usr/lib/systemd/system 裡面的 httpd.service 檔案。
這是因為開機時, Systemd 只執行 /etc/systemd/system 目錄裡面的組態檔。這也意味著,如果把修改後的組態檔放在該目錄,就可以達到覆蓋原始設定的效果。
$ sudo systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
Active: active (running) since 金 2014-12-05 12:18:22 JST; 7min ago
Main PID: 4349 (httpd)
Status: "Total requests: 1; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─4349 /usr/sbin/httpd -DFOREGROUND
├─4350 /usr/sbin/httpd -DFOREGROUND
├─4351 /usr/sbin/httpd -DFOREGROUND
├─4352 /usr/sbin/httpd -DFOREGROUND
├─4353 /usr/sbin/httpd -DFOREGROUND
└─4354 /usr/sbin/httpd -DFOREGROUND
12月 05 12:18:22 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
12月 05 12:18:22 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
12月 05 12:22:40 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
Loaded行: |
組態檔的位置,是否設為開機啟動 |
Active行: |
表示正在執行 |
Main PID行: |
主進程ID |
Status行: |
由應用本身(這裡是 httpd )提供的軟體當前狀態 |
CGroup塊: |
應用的所有子進程 |
紀錄檔塊: |
應用的紀錄檔 |
$ systemctl cat sshd.service
檢視組態檔
組態檔詳解
Unit |
|
|
After |
表示服務需要在***服務啟動之後執行 |
無依賴 |
Before |
表示服務需要在***服務啟動之前執行 |
無依賴 |
Wants |
弱依賴關係 |
|
Requires |
強依賴關係 |
***停止之後本服務也必須停止 |
Service |
|
|
EnvironmentFile |
環境引數檔案 |
EnvironmentFile=/etc/sysconfig/sshd 以key=value的形式儲存 以$key形式讀取 |
ExecStart |
啟動進程時執行的命令 |
|
ExecReload |
重新啟動服務時執行的命令 |
|
ExecStop |
停止服務時執行的命令 |
|
ExecStartPre |
啟動服務之前執行的命令 |
|
ExecStartPost |
啟動服務之後執行的命令 |
|
ExecStopPost |
停止服務之後執行的命令 |
|
所有的啟動設定之前,都可以加上一個連詞號(-),表示"抑制錯誤",即發生錯誤的時候,不影響其他命令的執行。比如,EnvironmentFile=-/etc/sysconfig/sshd(注意等號後面的那個連詞號),就表示即使/etc/sysconfig/sshd檔案不存在,也不會丟擲錯誤。
Type |
|
simple(預設值): |
ExecStart欄位啟動的進程為主進程 |
forking: |
ExecStart欄位將以fork()方式啟動,此時父進程將會退出,子進程將成為主進程 |
oneshot: |
類似於simple,但只執行一次,Systemd 會等它執行完,才啟動其他服務 |
dbus: |
類似於simple,但會等待 D-Bus 信號後啟動 |
notify: |
類似於simple,啟動結束後會發出通知信號,然後 Systemd 再啟動其他服務 |
idle: |
類似於simple,但是要等到其他任務都執行完,才會啟動該服務。一種使用場合是為讓該服務的輸出,不與其他服務的輸出相混合 |
KillMode |
|
control-group(預設值): |
當前控制組裡面的所有子進程,都會被殺掉 |
process: |
只殺主進程 |
mixed: |
主進程將收到 SIGTERM 信號,子進程收到 SIGKILL 信號 |
none: |
沒有進程會被殺掉,只是執行服務的 stop 命令。 |
Restart |
|
no(預設值): |
退出後不會重新啟動 |
on-success: |
只有正常退出時(退出狀態碼為0),才會重新啟動 |
on-failure: |
非正常退出時(退出狀態碼非0),包括被信號終止和超時,才會重新啟動 |
on-abnormal: |
只有被信號終止和超時,才會重新啟動 |
on-abort: |
只有在收到沒有捕捉到的信號終止時,才會重新啟動 |
on-watchdog: |
超時退出,才會重新啟動 |
always: |
不管是什麼退出原因,總是重新啟動 |
修改組態檔以後,需要重新載入組態檔,然後重新啟動相關服務。
# 重新載入組態檔
$ systemctl daemon-reload
相關文章