什么是systemd service?
systemd service是一種以.service 結尾的配置文件,是一個專用於Linux操作系統的系統與服務管理器。簡單來說,用於后台以守護精靈(daemon)的形式運行程序。
systemd服務的內容主要分為三個部分,控制單元[Unit]的定義、服務[Service]的定義、以及[Install]安裝部分。
示例詳解
| [Unit] Description=httpd #當前配置文件的描述信息 After=network.target #表示當前服務是在那個服務后面啟動,一般定義為網絡服務啟動后啟動
[Service] Type=forking #定義啟動類型 ExecStart=/usr/local/apache/bin/apachectl start #定義啟動進程時執行的命令 ExecReload=/usr/local/apache/bin/apachectl restart #重啟服務時執行的命令 ExecStop=/usr/local/apache/bin/apachectl stop #定義關閉進程時執行的命令 PrivateTmp=true #是否分配獨立空間
[Install] WantedBy=multi-user.target #表示多用戶命令行狀態 |
字段詳解
[Unit]字段
這個字段主要給出服務描述、啟動順序和依賴關系。
字段說明
· Description:給出當前服務的簡單描述。
· Documentation:給出文檔位置。
· After:表示在什么服務之后啟動。
· Before:表示在什么服務之前啟動。
· Wants:表示該服務和某服務存在某種弱依賴關系,即某服務停止運行或退出不影響該服務繼續運行。
· Requires:則表示”強依賴”關系,即某服務停止運行或退出,改服務也必須停止運行。
After和Before只涉及啟動順序,不涉及依賴關系。
Wants與Requires只涉及依賴關系,與啟動順序無關,默認情況下是同時啟動的。
[Server]字段
這個字段主要給出服務的啟動行為,如何啟動、重啟、停止。
字段說明
· Type:定義啟動類型。它可以設置的值如下:
o simple(默認值):ExecStart字段啟動的進程為主進程。
o forking:ExecStart字段將以fork()方式啟動,此時父進程將會退出,子進程將成為主進程。
o oneshot:類似於simple,但只執行一次,Systemd會等它執行完,才啟動其他服務。
o dbus:類似於simple,但會等待D-Bus信號后啟動。
o notify:類似於simple,啟動結束后會發出通知信號,然后Systemd再啟動其他服務。
o idle:類似於simple,但是要等到其他任務都執行完,才會啟動該服務。一種使用場合是為讓該服務的輸出,不與其他服務的輸出相混。
· ExecStart:定義啟動進程時執行的命令,就是手動啟動時執行的命令。
· ExecReload:重啟服務時執行的命令。
· ExecStop:停止服務時執行的命令。
· ExecStartPre:啟動服務之前執行的命令。
· ExecStartPost:啟動服務之后執行的命令。
· ExecStopPost:停止服務之后執行的命令。
· KillMode:定義Systemd如何停止sshd服務。它可以設置的值如下:
o control-group(默認值):當前控制組里面的所有子進程,都會被殺掉。
o process:只殺主進程。
o mixed:主進程將收到SIGTERM信號,子進程收到SIGKILL信號。
o none:沒有進程會被殺掉,只是執行服務的stop命令。
· Restart:定義了sshd退出后,Systemd的重啟方式。它可以設置的值如下:
對於守護進程,推薦設為on-failure。對於那些允許發生錯誤退出的服務,可以設為on-abnormal。
o no(默認值):退出后不會重啟。
o on-success:只有正常退出時(退出狀態碼為0),才會重啟。
o on-failure:非正常退出時(退出狀態碼非0),包括被信號終止和超時,才會重啟。
o on-abnormal:只有被信號終止和超時,才會重啟。
o on-abort:只有在收到沒有捕捉到的信號終止時,才會重啟。
o on-watchdog:超時退出,才會重啟。
o always:不管是什么退出原因,總是重啟。
· RestartSec:表示Systemd重啟服務之前,需要等待的秒數。
· user:可以設置服務的用戶名。
· WorkingDirectory:指定服務的安裝目錄。
[Install]字段
該字段定義如何安裝這個配置文件,即怎樣做到開機自啟。
字段說明:
· WantedBy:表示該服務所在的Target。
Target的含義是服務組,表示一組服務。WantedBy=multi-user.target指的是服務所在的Target是multi-user.target
Systemd有默認的啟動Target。就是multi-user.target,在這個組里的所有服務,都將開機啟動。
查看multi-user.target包含的所有服務:
| systemctl list-dependencies multi-user.target |
