CentOS7.9 systemctl

ThankCAT發表於2024-04-19

目錄
  • 命令格式
  • 語法
  • 載入配置檔案
  • 關機和開機
  • 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
``

相關文章