Linux中如何使用systemctl進行服務的管理?

安全劍客發表於2020-11-20
服務:常駐系統記憶體中的程式且可以提供一些系統和網路功能;現在最新的 都統一使用systemctl進行服務的管理。
一、執行級別的分類 runlevel
  • 執行級別0:系統停機狀態
  • 執行級別1:單使用者工作狀態,root許可權,用於系統維護,禁止遠端登陸
  • 執行級別2:多使用者狀態(沒有NFS)
  •  執行級別3:完全的多使用者狀態(有NFS)
  •  執行級別4:系統未使用,保留
  •  執行級別5:X11控制檯
  •  執行級別6:系統正常關閉並重啟
二、管理服務 systemctl (root許可權)
  • systemctl [opt] xxx.service
  • status 檢視當前服務狀態
  • start 啟動服務
  • stop 關閉服務
  • restart 重啟服務
  • enable 設定開機啟動
  • disable 設定開機不啟動
  • reload 後面不接具體服務名,重新載入配置檔案
  • mask 登出服務
  • unmask 取消登出
三.一些常用  systemctl
  • 檢視當前已經啟動的服務 systemctl list-units
  • 檢視所有服務 systemctl list-unit-files
  • 檢視服務有哪些依賴 systemctl list-dependencies xx.service
  • 檢視服務有哪些依賴(反向) systemctl list-dependencies --reverse xx.service
四.system 服務相關的一些目錄(   環境,Debian 類的環境可能會有稍許不同)
  • /usr/lib/systemd/system/ 系統安裝的軟體預設啟動 目錄
  • /etc/systemd/system/ 使用者根據自己需要建立的啟動 目錄
  • /etc/sysconfig/ 服務初始化選專案錄
  • /var/lib/ 服務執行時產生的資料儲存目錄
  • /etc/xxx/ 各服務配置目錄
五.結合一個例子來具體講解,一臺機開啟兩個ssh服務

我們最常使用的ssh服務,系統預設ssh服務22埠,我現在想再開一個ssh服務,埠8888

1.系統服務啟動指令碼 /usr/lib/systemd/system/sshd.service,將其複製到 /etc/systemd/system/ 下,並改名為 sshd2.service,檔案內容如下:

[Unit]
 Description=OpenSSH server daemon
 Documentation=man:sshd(8) man:sshd_config(5)
 After=network.target sshd-keygen.service
 Wants=sshd-keygen.service
 
 [Service]
 Type=notify
 EnvironmentFile=/etc/sysconfig/sshd
 ExecStart=/usr/sbin/sshd -D $OPTIONS
 ExecReload=/bin/kill -HUP $MAINPID
 KillMode=process
 Restart=on-failure
 RestartSec=42s
 
 [Install]
 WantedBy=multi-user.target

因為要重啟一個新的服務,所以要修改一下ExecStart這一行,讀取新的配置檔案 sshd2_config,改為

ExecStart=/usr/sbin/sshd -D $OPTIONS -f /etc/ssh/sshd2_config

2.到 /etc/ssh/ 下,將 sshd_config 複製到 sshd2_config,並修改埠那一行

Port 8888

3.執行  systemctl reload 重新載入一下配置

4.執行命令 systemctl status sshd2.service 檢視狀態

5 執行命令 systemctl start sshd2.service 開啟服務

6.執行命令 systemctl enable sshd2.service 設定開機啟動

7.在另一臺機器上登入 ssh fancy@ip -p8888 就可以登入了

  • 注意1,防火牆要開啟8888埠
  • 注意2,官方建議使用者自己新建的服務指令碼最好存放在 /etc/systemd/system/ 目錄下,實際情況下存放在系統服務目錄 /usr/lib/systemd/system/ 下也是沒有問題的,看個人選擇了
六、我們再來舉個例子,做一個自己的服務

1.在 /root/bin/ 下建立一個 指令碼 fancy_test.sh,並修改其許可權,chmod u+x fancy_test.sh,內容如下

#!/bin/bash
logdate=$(date +%s)
logdir="/root/log/"
logname=fancy.${logdate}.log
#echo $logname
touch ${logdir}${logname}

意思是,執行該服務時,在 /root/log/ 目錄下建立一個日誌檔案

2.在 /etc/systemd/system/ 下建立啟動指令碼 fancy_test.service,輸入一下內容

[Unit]
Description=fancy_test server daemon
 
[Service]
Type=simple
ExecStart=/root/bin/fancy_test.sh
 
[Install]
WantedBy=multi-user.target

3.執行命令 systemctl reload

4.執行命令 systemctl start fancy_test.service

5.此時你會看到在 /root/log/ 目錄下建立了一個日誌檔案

  • 注意,我們這個是最簡單的服務,執行幾個命令而已,所以沒有配置檔案,也不會常駐記憶體,執行一次就結束

原文地址:

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

相關文章