目錄
- 命令格式
- 語法
- 載入配置檔案
- 關機和開機
- unit 檔案存放位置
- unit 格式說明
- service unit file 檔案構成部分
- unit 段的常用選項
- service 段的常用選項
- install 段的常用選項
- unit 檔案的例子
- nginx unit 檔案
- supervisord unit 檔案
命令格式
systemctl [命令] [服務名稱]
systemctl start nginx.service
命令
1 start 開啟
2 stop 關閉
3 restart 重啟
4 status 檢視狀態
5 is-active 檢視啟用與否
6 enable 設定開機啟動
7 disable 禁止開機啟動
8 is-enabled 檢視是否開機自啟
9 kill 殺死程序
10 mask 禁止自動和手動啟動
11 unmask 取消禁止
12 list-dependencies 檢視服務的依賴關係
語法
#語法
systemctl COMMAND name.service
#啟動
systemctl start name.service
#停止
systemctl stop name.service
#重啟
systemctl restart name.service
#檢視狀態
systemctl status name.service
#禁止自動和手動啟動
systemctl mask name.service
#取消禁止
systemctl unmask name.service
#檢視某服務當前啟用與否的狀態:
systemctl is-active name.service
#檢視所有已經啟用的服務:
systemctl list-units --type|-t service
#檢視所有服務:
systemctl list-units --type service --all
#設定某服務開機自啟,相當於chkconfig name on
systemctl enable name.service
#設定某服務開機禁止啟動:相當於chkconfig name off
systemctl disable name.service
#檢視所有服務的開機自啟狀態,相當於chkconfig --list
systemctl list-unit-files --type service
#用來列出該服務在哪些執行級別下啟用和禁用:chkconfig –list name
ls /etc/systemd/system/*.wants/name.service
#檢視服務是否開機自啟:
systemctl is-enabled name.service
#列出失敗的服務
systemctl --failed --type=service
#開機並立即啟動或停止
systemctl enable --now postfix
systemctl disable --now postfix
#檢視服務的依賴關係:
systemctl list-dependencies name.service
#殺掉程序:
systemctl kill unitname
#重新載入配置檔案
systemctl daemon-reload
#關機
systemctl halt、systemctl poweroff
#重啟:
systemctl reboot
#掛起:
systemctl suspend
#休眠:
systemctl hibernate
#休眠並掛起:
systemctl hybrid-sleep
載入配置檔案
systemctl 名字-reload
關機和開機
systemctl poweroff 關機
systemctl reboot 開機
unit 檔案存放位置
本檔案一共有三個地方可以存放
/etc/systemd/system/
/usr/lib/systemd/system
/lib/systemd/system
unit 格式說明
1、以 '#' 開頭的行後面的內容會被認為是註釋
2、相關布林值,1、yes、on、true 都是開啟,0、no、off、false 都是關閉
3、時間單位預設是秒,所以要用毫秒(ms)分鐘(m)等須顯式說明
service unit file 檔案構成部分
1、[Unit]:定義與Unit型別無關的通用選項;用於提供unit的描述資訊、unit行為及依賴關係等
2、[Service]:與特定型別相關的專用選項;此處為Service型別
3、[Install]:定義由“systemctl enable”以及"systemctl disable“命令在實現服務啟用或禁用時用到的一些選項
unit 段的常用選項
描述 | 可選項 |
---|---|
Description | 對當前服務的簡單描述 |
After | 可以指定在哪些服務之後進行啟動 |
Before | 可以指定在哪些服務之前進行啟動 |
Requires | 可以指定服務依賴於哪些服務 (這種依賴是” 強依賴”,一旦所依賴的服務異常,當前的服務也隨之停止) |
Wants | 可以指定服務依賴於哪些服務 (這種依賴是” 弱依賴”,即使所依賴的服務的啟動情況不影響當前的服務是否啟動) |
Conflicts | 定義 units 間的衝突關係 |
service 段的常用選項
可選項 | 描述 |
---|---|
EnvironmentFile | 環境配置檔案,用來指定當前服務啟動的環境變數 |
ExecStart | 指定服務啟動時執行的命令或指令碼 |
ExecStartPre | 指定服務啟動前執行的命令或指令碼 |
ExecStartPost | 指定服務啟動後執行的命令或指令碼 |
ExecStop | 指明停止服務要執行的命令或指令碼 |
ExecStopPost | 指定服務停止之後執行的命令或指令碼 |
RestartSec | 指定服務在重啟時等待的時間,單位為秒 |
ExecReload | 指明重啟服務要執行的命令或指令碼 |
Restart | 當設定 Restart=1 時,則當次 daemon 服務意外終止後,會再次自動啟動此服務,具體看下列型別 |
PrivateTmp | 設定為 yes 時,會在生成 /tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/ 目錄 |
KillMode | 指定停止的方式,具體見下面 |
Restart | 指定重啟時的型別,具體見下面 |
Type | 指定啟動型別,具體見下面 |
type 選項
type 可選項 | 描述 |
---|---|
simple | 指定 ExecStart 欄位的程序為主程序 |
forking | 指定以 fork () 子程序執行 ExecStart 欄位的程序 |
oneshot | 執行一次 |
notify | 啟動後傳送會傳送通知訊號通知 systemd |
idle | 等其他任務結束後才執行 |
restart 的可選值
restart 可選項 | 描述 |
---|---|
no | 退出後不會重啟 |
on-success | 當程序正常退出時 (退出碼為 0) 執行重啟 |
on-failure | 當程序不正常退出時 (退出碼不為 0) 執行重啟 |
on-abnormal | 當被訊號終止和超時執行重啟 |
on-abort | 當收到沒有捕捉到的訊號終止時執行重啟 |
on-watchdog | 當看門狗超時時執行重啟 |
always | 一直重啟 |
killModel
KillMode 可選項 | 描述 |
---|---|
control-group | 殺掉當前程序中所有的程序 |
process | 殺掉當前程序的主程序 |
mixed | 主程序將收到 SIGTERM 訊號,子程序收到 SIGKILL 訊號 |
none | 不殺掉任何程序 |
install 段的常用選項
install 段的常用選項 | 描述 |
---|---|
Alias | 別名,可使用 systemctl command Alias.service |
RequiredBy | 被哪些 units 所依賴,強依賴 |
WantedBy | 被哪些 units 所依賴,弱依賴 |
Also | 安裝本服務的時候還要安裝別的相關服務 |
Install 一般填為 WantedBy=multi-user.target
注意:對於新建立的unit檔案,或者修改了的unit檔案,要通知systemd過載此配置檔案,而後可以選擇重啟,使用命令
systemctl daemon-reload
unit 檔案的例子
[Unit]
Description=Frp Client Service #指明自己的描述
After=network.target #指明本服務需要在network服務啟動後在啟動
[Service]
Type=simple #指明下面ExecStart欄位的程序為主程序
User=nobody#這個可寫可不寫
Restart=always#當程序正常退出時重啟
RestartSec=5s #服務在重啟時等待的時間,這裡指定為5s
ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini #指定服務啟動時執行的指令碼或者命令
ExecReload=/usr/bin/frpc reload -c /etc/frp/frpc.ini #指定服務重啟時執行的指令碼或者命令
LimitNOFILE=1048576 #程序的檔案控制代碼硬限制
[Install]
WantedBy=multi-user.target
將此檔案命名為 frps.service 複製到 /lib/systemd/system 裡面,然後重新載入 systemctl 配置檔案
systemctl daemon-reload
nginx unit 檔案
[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target
Documentation=https://nginx.org/en/
[Service]
Type=forking
PIDFile=/opt/nginx/logs/nginx.pid
ExecStartPre=/opt/nginx/sbin/nginx -t -c /opt/nginx/conf/nginx.conf
ExecStart=/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf
ExecReload=/opt/nginx/sbin/nginx -s reload
ExecStop=/opt/nginx/sbin/nginx -s stop
ExecQuit=/opt/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
supervisord unit 檔案
[Unit]
Description=Supervisor daemon
Documentation=http://supervisord.org/
[Service]
Type=forking
ExecStart=/opt/anaconda3/envs/GrowthVision/bin/supervisord -c /etc/supervisord.conf
ExecStop=/opt/anaconda3/envs/GrowthVision/bin/supervisord shutdown
ExecReload=/opt/anaconda3/envs/GrowthVision/bin/supervisord reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
``