一、CentOS7 服務管理方式
CentOS 7 使用systemctl命令管理服務,基本常用命令:
systemctl start ssh # 啓動ssh服務
systemctl stop ssh # 停止ssh服務
systemctl restart ssh # 重新啓動ssh服務
systemctl reload ssh # 重新啓動ssh服務
systemctl status ssh # 查看ssh服務的狀態
systemctl is-active ssh # 查看服務是否爲開機啓動
systemctl enable ssh # 設置服務爲開機啓動
systemctl disable ssh # 取消服務的開機啓動
注:更多systemctl的命令,請自行百度;這裏值列舉幾個常用的命令。
二、編寫.service配置文件說明
1、[unit]區塊:設置管理啓動順序與依賴關係
配置項 | 描述 |
---|---|
Description=服務描述 | 給出當前服務的簡單描述 |
Documentation=路徑或url | 給出文檔位置 |
After=服務.target或服務.service | 定義在某些服務之後啓動。例如sshd服務啓動必須在network.target sshd-keygen.service服務開啓之後才能啓動,可以使用如下命令查看sshd服務的配置cat /usr/lib/systemd/system/sshd.service |
Before=服務.target | 定義在某些服務之前啓動 |
Wants=服務.service | 弱依賴,表示等號填寫服務啓動或失敗,不影響此配置文件服務的啓動 |
Requires=服務.service | 強依賴,表示等號填寫服務啓動或失敗,那麼此配置文件的服務將啓動失敗 |
注意:如果After、Before、Wants、Requires等號後面需要填寫多個服務可以用空格隔開。After和Before字段只涉及啓動順序,不涉及依賴關係。Wants字段與Requires字段只涉及依賴關係,與啓動順序無關,默認情況下是同時啓動的。
2、[Service]區塊:設置啓動行爲
- 啓動命令
配置項 | 描述 |
---|---|
ExecStart=命令 | 定義啓動進程時執行的命令 |
ExecReload=命令 | 重啓服務時執行的命令 |
ExecStop=命令 | 停止服務時執行的命令 |
ExecStartPre=命令 | 啓動服務之前執行的命令 |
ExecStartPost=命令 | 啓動服務之後執行的命令 |
ExecStopPost=命令 | 停止服務之後執行的命令 |
所有的啓動設置之前,都可以加上一個連詞號(-),表示"抑制錯誤",即發生錯誤的時候,不影響其他命令的執行。例如:ExecStop=-/bin/sh /server/scripts/xx.sh
- 啓動類型 Type字段定義啓動類型。它可以設置的值如下:
配置項 | 描述 |
---|---|
simple(默認值) | ExecStart字段啓動的進程爲主進程 |
forking | ExecStart字段將以fork()方式啓動,此時父進程將會退出,子進程將成爲主進程(後臺運行) |
oneshot | 類似於simple,但只執行一次,Systemd 會等它執行完,才啓動其他服務 |
dbus | 類似於simple,但會等待 D-Bus 信號後啓動 |
notify | 類似於simple,啓動結束後會發出通知信號,然後 Systemd 再啓動其他服務 |
idl | 類似於simple,但是要等到其他任務都執行完,纔會啓動該服務。一種使用場合是爲讓該服務的輸出,不與其他服務的輸出相混合 |
- 重啓行爲
KillMode字段,定義Systemd如何停止服務,它可以設置的值如下
配置項 | 描述 |
---|---|
control-group(默認值) | 當前控制組裏面的所有子進程,都會被殺掉 |
process | 只殺主進程 |
mixed | 主進程將收到 SIGTERM 信號,子進程收到 SIGKILL 信號 |
none | 沒有進程會被殺掉,只是執行服務的 stop 命令 |
Restart字段,定義了服務退出後,Systemd的重啓方式,它可以設置的值如下
配置項 | 描述 |
---|---|
no(默認值) | 退出後不會重啓 |
on-success | 只有正常退出時(退出狀態碼爲0),纔會重啓 |
on-failure | 非正常退出時(退出狀態碼非0),包括被信號終止和超時,纔會重啓 |
on-abnormal | 只有被信號終止和超時,纔會重啓 |
on-abort | 只有在收到沒有捕捉到的信號終止時,纔會重啓 |
on-watchdog | 超時退出,纔會重啓 |
always | 不管是什麼退出原因,總是重啓 |
- service區塊的其他一些字段
配置項 | 描述 |
---|---|
EnvironmentFile=文件路徑 | 指定當前服務的環境參數文件 |
RestartSec=數值 | 表示Systemd重啓服務之前,需要等待的秒數 |
PIDFile=PID文件路徑 | PID進程文件 |
KillSignal=信號量 | 停止信號量,值一般爲SIGQUIT |
TimeoutStopSec=數值 | 停止超時時間 |
PrivateTmp=布爾值 | 獨立空間true或false,即文件系統名字空間的配置將被該命令行啓動的進程忽略 |
更多配置詳解點擊:http://www.jinbuguo.com/systemd/systemd.service.html
3、[Install]區塊:定義如何安裝這個配置文件,即怎樣做到開機啓動
這個設置非常重要,如果設置開機自啓動,在/etc/systemd/system目錄下面的multi-user.target.wants子目錄之中機會創建一個服務的軟鏈接
WantedBy字段,表示該服務所在的 Targe,target的含義是服務組,表示一組服務,它可以設置的值如下
配置項 | 描述 |
---|---|
multi-user.target | 表示多用戶命令行狀態 |
graphical.target | 表示圖形用戶狀態,它依賴於multi-user.target |
三、註冊服務實例
配置文件目錄
文件類型 | 文件位置 |
---|---|
systemctl腳本目錄 | /usr/lib/systemd/ |
系統服務目錄 | /usr/lib/systemd/system/ |
用戶服務目錄 | /usr/lib/systemd/system/ |