Linux系統下systemctl常用命令以及service檔案配置

Qiyang發表於2023-01-03

linux服務管理的兩種方式為service和systemctl。systemd是Linux系統最新的初始化系統(init),作用是提高系統的啟動速度,儘可能啟動較少的程式,儘可能併發啟動更多程式。systemd對應的程式管理命令是systemctl。


啟揚智慧ARM嵌入式開發


systemctl命令用法


1. 列出所用可用單元

systemctl list-unit-files

2. 列出所有執行中的單元

systemctl list-units

3. 檢查某個單元(如 crond.service)是否啟用

systemctl is-enabled crond.service

4. 列出所有服務

systemctl list-unit-files ?Ctype=service

5. Linux中如何啟動、重啟、停止、過載服務以及檢查服務(如 httpd.service)狀態

systemctl start httpd.service
systemctl restart httpd.service
systemctl stop httpd.service
systemctl reload httpd.service
systemctl status httpd.service

6. 如何啟用服務並在開機時啟用或禁用服務(即系統啟動時自動啟動mysql.service服務)

systemctl is-active mysql.service
systemctl enable mysql.service
systemctl disable mysql.service

7. 如何遮蔽(讓它不能啟動)或顯示服務(如ntpdate.service)

systemctl mask ntpdate.service

ln -s '/dev/null' '/etc/systemd/system/ntpdate.service'

systemctl unmask ntpdate.service

rm '/etc/systemd/system/ntpdate.service'

8. 使用systemctl命令殺死服務

systemctl kill crond


編寫一個服務

1. 新增服務檔案

在/etc/systemd/system/檔案目錄下新增.service服務檔案;

2. 編寫.service檔案

[Unit]

Description=test for service

ConditionFileIsExecutable=/etc/init.d/tst.sh

After=weston.service


[Service]

Type=forking

ExecStart=-/etc/init.d/tst.sh start

ExecStop=-/etc/init.d/tst.sh stop


[Install]

WantedBy=multi-user.target


從上面可以看出.serive檔案包括三個部分:[Unit]、[Service]、[Install]。

[Unit]

Description:對當前服務的簡單描述。

After:指定.serive在哪些服務之後進行啟動;

Before:指定.serive在哪些服務之前進行啟動;


除上述內容,檔案中還可能出現以下內容:

Requires:指定服務依賴於哪些服務(強依賴關係,一旦所依賴服務異常,當前服務也隨之停止);

Wants:指定服務依賴於哪些服務(弱依賴關係,所依賴服務異常不影響當前服務正常執行)。

[Service] 

Type:定義啟動型別。可設定:simple,exec,forking,oneshot,dbus,notify,idle。

simple:ExecStart 欄位啟動的程式為該服務的主程式;

forking:ExecStart 欄位的命令將以 fork() 方式啟動,此時父程式將會退出,子程式將成為主程式;

ExecStart:定義啟動程式時執行的命令;

ExecStop:停止服務時執行的命令;


除上述內容外,檔案中還可能出現:

EnvironmentFile:環境配置檔案,用來指定當前服務啟動的環境變數;

ExecReload:重啟服務時執行的命令;

ExecStartPre:啟動服務之前執行的命令;

ExecStartPost:啟動服務之後執行的命令;

ExecStopPost:停止服務之後執行的命令;

RemainAfterExit:設為yes,表示程式退出以後,服務仍然保持執行;

RestartSec:重啟服務之前需要等待的秒數。


KillMode:定義 Systemd 如何停止服務,可以設定的值如下:

control-group(預設值):當前控制組裡面的所有子程式,都會被殺掉;

process:只殺主程式;

mixed:主程式將收到 SIGTERM 訊號,子程式收到 SIGKILL 訊號;

none:沒有程式會被殺掉。


Restart:定義了退出後,Systemd 的重啟方式。

可以設定的值如下:

no(預設值):退出後不會重啟;

on-success:當程式正常退出時(退出狀態碼為0),才會重啟;

on-failure:當程式非正常退出時(退出狀態碼非0),包括被訊號終止和超時,才會重啟;

on-abnormal:當被訊號終止和超時,才會重啟;

on-abort:當收到沒有捕捉到的訊號終止時,才會重啟;

on-watchdog:看門狗超時退出,才會重啟;

always:總是重啟。

[Install] 

Install一般填為WantedBy=multi-user.target,表示多使用者環境下服務被啟用。

3. 設定開機自啟動

systemctl enable (服務名)

4. 查詢服務狀態

systemctl status (服務名)



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70018165/viewspace-2930510/,如需轉載,請註明出處,否則將追究法律責任。

相關文章