Linux:注冊系統服務


【參考文章】:Systemd 入門教程:實戰篇

【參考文章】:linux systemctl命令詳解

1. 簡介

  將程序注冊為系統服務后,可通過 systemctl 和 service 系統命令啟動,查看,停止程序,並可以將程序設置為開機自啟動等等。

  將程序注冊為系統服務,需要編輯xxx.service文件,並將文件存儲到 /usr/lib/systemd/system/ 目錄下

2. 常用命令

  命令格式:systemctl 動作    服務名,service   服務名  動作, 兩個命令效果一樣

  systemctl  status  xxx  查看服務狀態

  systemctl  start  xxx    啟動服務

  systemctl  stop  xxx         停止服務

  systemctl  restart  xxx      重啟服務

  systemctl  enable  xxx     啟用服務開機自啟動

  systemctl  disable  xxx    禁止服務開機自啟動

  systemctl  list-units  --type=service  查看所有已啟動的服務

  修改xxx.service文件后,需要執行 systemctl daemon-reload 重新加載文件;

3. service 文件格式

  vim /usr/lib/systemd/system/sshd.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
PrivateTmp=true [Install] WantedBy
=multi-user.target

3.1 Unit

 此區塊信息用於描述當前服務的簡單描述:

     Description:服務描述信息;

  Documentation:文檔相關信息;

  下面四個選項只涉及啟動順序,不涉及依賴關系;

  After:定義sshd服務應該在哪些服務之后啟動;

  Before:定義sshd服務應該在哪些服務之前啟動;

  Requires:表示強依賴關系,如果sshd服務啟動失敗或異常退出,則Requires配置的服務也必須退出;

  Wants:表示若依賴關系,如果sshd服務啟動失敗或異常退出,不影響Wants配置的服務;

3.2 Service

  此區塊定義如何啟動當前服務

3.2.1 啟動類型

 type 字段定義啟動類型 

  simple:默認值,ExecStart字段啟動的進程為主進程,如果啟動腳本中 以 nohup & 形式啟動進程時,此時啟動腳本后會自動 kill 當前服務

  forking:ExecStart字段將以fork()方式啟動,此時父進程將會退出,子進程將成為主進程;

  oneshot:類似於simple,但只執行一次,Systemd 會等它執行完,才啟動其他服務,表明這個服務只要運行一次就行;

  dbus:類似於simple,但會等待 D-Bus 信號后啟動

  notify:類似於simple,啟動結束后會發出通知信號,然后 Systemd 再啟動其他服務

  idle:類似於simple,但是要等到其他任務都執行完,才會啟動該服務。一種使用場合是為讓該服務的輸出,不與其他服務的輸出相混合

3.2.2 啟動,停止,重啟命令

  EnvironmentFile:環境參數配置文件,文件內部配置參數形式為key=value鍵值對,可以在service文件中以$key的形式引用配置項;

  ExecStart:啟動服務時執行的命令;

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

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

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

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

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

3.2.3 停止模式

  KillMode 表示停止服務時的方式

  control-group:默認值,當前控制組里面的所有子進程,都會被殺掉

  process:只殺主進程

  mixed:主進程將收到 SIGTERM 信號,子進程收到 SIGKILL 信號

  none:沒有進程會被殺掉,只是執行服務的 stop 命令

3.2.4 PrivateTmp

  該字段用於設置服務是否使用私有的 tmp目錄;

  該目錄在 /tmp目錄下,目錄名格式如下:

  /tmp/systemd-private-66ae5e5313ba4417b83b427fddb36e47-xxx.service-s65dIw/

  服務啟動時創建一個目錄,服務停止時刪除臨時目錄;

  啟用該屬性后,寫臨時文件時可能會寫到這個目錄下,需要注意一下

  php-fpm臨時文件路徑問題(Sytemd PrivateTmp的坑)

  Systemd Unit文件中PrivateTmp字段詳解-Jason.Zhi

3.3 Install

  定義如何安裝配置文件;

  WantedBy:表示服務所在的服務組;

  WantedBy=multi-user.target 表示 sshd服務屬於 multi-user.target 用戶組;

  multi-user.target 組里的所有服務都將開機啟動;

  執行 systemctl enable sshd.service 時將把 sshd.service 文件的一個符號鏈接保存到 /etc/systemd/system 目錄下的 multi-user.target.wants 子目錄中;

4. service文件模板

  最簡化的service模板

[Unit]
Description=simulator

[Service]
Type=simple
ExecStart=/home/chenfan/simulator/start.sh
ExecStop=/home/chenfan/simulator/stop.sh

[Install]
WantedBy=multi-user.target

 

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM