首頁 > 軟體

systemctl啟動服務指令碼編寫使用

2020-06-16 16:33:32

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


IT145.com E-mail:sddin#qq.com