Centos7 可執行程序自定義為系統服務


systemctl的使用相比以往系統服務的/etc/init.d的啟動腳本的方式變動也比較大,但變的更簡單更易用了,同firewalld一樣,運行原理一目了然,對於初學者來說,只要做過一兩次練習,就能適應各種生產環境。

1、systemctl
用法:systemctl [OPT] COMMAND [NAME]…
啟動服務:systemctl start NAME.service
停止服務:systemctl stop NAME.service
重啟服務:systemctl restart NAME.service
服務狀態:systemctl status NAME.service
條件式重啟,已啟動才重啟,否則不作操作:systemctl try-restart NAME.service
重載或重啟服務,先加載再啟動:systemctl reload-or-restart NAME.service
重載或條件式重啟:systemctl reload-or-try-restart NAME.service
禁止自動和手動啟動:systemctl mask NAME.service
取消禁止:systemctl unmask NAME.service
查看某服務當前激活與否的狀態:systemctl is-active NAME.service
查看所有已經激活的服務:systemctl list-units -t service
查看所有服務:systemctl list-units -t service -a
設定某服務開機自啟動:systemctl enable NAME.service
設定某服務開機禁止啟動:systemctl disable NAME.service
查看所有服務的開機自啟動狀態:systemctl list-unit-files –t service
列出該服務在哪些運行級別下啟用和禁止:ls /etc/systemd/system/*.wants/sshd.service
查看服務是否開機啟動:systemctl is-enabled NAME.service
查看服務的依賴關系:systemctl list-dependencies NAME.service
殺掉進程:systemctl kill (進程名)

2、服務狀態:
loaded:unit配置文件已處理
active(running):一次或多次持續處理的運行
active(exited):成功完成一次性配置
active(waiting):運行中,等待一個事件
inactive:不運行
enable:開機啟動
disable:開機不啟動
static:開機不啟動,但可以被另一個啟用的服務激活。

3、運行級別:
0 :關機:poweroff.target
1 :單用戶模式:rescue.target
2 :默認不啟用NFS的多用戶:multi-user.target
3 :完全的多用戶:multi-user.target
4 :保留:mult-user.target
5 :圖形:graphical.target
6 :重啟:reboot.target

 

CentOS 7的服務systemctl腳本存放在:/usr/lib/systemd/,有系統(system)和用戶(user)之分,因為我們配置的絕大多數腳本都不需要登陸系統才能運行,所以基本都是放在/usr/lib/systemd/system下。

  每一個服務以.service結尾,我們打開/usr/lib/systemd/system會發現很多以.service結尾的程序文件,其實只要復制一個然后編輯,就很容易寫一個服務。以現在我們經常會用來科學上網的shadowsocks來說,我們安裝完 shadowsocks后,需要用ssserver -c /etc/shadowsocks.json -d start 這樣的命令來啟動服務,如果需要開機啟動,除了加入rc.local,我們將它轉化為系統服務無疑是更方便操作。

  我們新建一個shadowsocks.service然后編輯:

[Unit]
Description=shadowsocks
After=this is a shadowsocks service

[Service]
Type=forking
PIDFile=/run/shadowsocks.pid
ExecStart=/usr/bin/ssserver -c /etc/shadowsocks.json -d start
ExecReload=/usr/bin/ssserver -c /etc/shadowsocks.json -d restart
ExecStop=/usr/bin/ssserver -c /etc/shadowsocks.json -d stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target

 

以 tomcat 為例,在CentOS上配置為系統服務,隨操作系統啟動而啟動,在 /etc/systemd/system 目錄下創建 tomcatd.service 文件,並編輯內容如下:

[Unit]  
Description=tomcat  
After=network.target  
  
[Service]  
User=myuser  
Group=myuser  
  
Type=forking  
  
ExecStart=/home/idbk/tomcat/bin/startup.sh  
ExecStop=/home/idbk/tomcat/bin/shutdown.sh  
PrivateTmp=true  
  
[Install]  
WantedBy=multi-user.target 

 

配置參數說明如下:

a)  Unit文件格式
/etc/systemd/system:系統管理員和用戶使用;
/usr/lib/systemd/system:發行版打包者使用;
默認單位是秒;通常由三部分組成:

[Unit]:定義與unit類型無關的通用選項;用於提供unit的描述信息,unit行為及依賴關系;

常用的選項:
Description:描述信息
After:定義unit的啟動次序,表示當前unit應該晚於哪些unit啟動,其功能與Before相反;
Requires:依賴到的其它units,強依賴,被依賴的units無法激活時,當前unit即無法激活;
Wants:依賴到的其它units,弱依賴;
Conflicts:定義units間的沖突關系。

 

b) [Service]:與特定類型相關的專用選項;此處為service類型;

常用選項:
Type:定義影響ExecStart及相關參數功能的unit進程啟動類型;
simple:默認值,這個daemon主要由ExecStart接的指令串來啟動,啟動后常駐於內存中;
forking:由ExacStart啟動的程序透過spawns延伸出其它子程序來作為此deamon的主要服務。原生父程序在啟動結束后就會終止。
oneshot:與simple類似,不過這個程序在完成工作后就結束,不常駐內存;
dbus:與simple類似,但這個daemon必須要在取得一個D-Bus的名稱后,才會繼續運作。因此通常也要同時設定BusName=才行;
notify:在啟動完成后會發送一個通知消息。還需要配合NotifyAccess來讓Systemd接收消息;
idle:與simple類似,要執行這個daemon必須要所有的工作都順利執行完畢后才會執行。這類的daemon通常是開機到最后才執行即可的服務。
EnvironmentFile:環境配置文件;
ExecStart:指明啟動unit要運行命令或腳本的絕對路徑
ExecStartPre:在ExecStart之前運行的絕對路徑
ExecStartPost:在ExecStart之后運行的絕對路徑
ExecStop:指明停止unit要運行的命令或腳本的絕對路徑
Restart:當設定Restart=1時,則當次daemon服務意外終止后,會再次自動啟動。

PrivateTmp:true/false表示是否給服務分配獨立的臨時空間

 

c) [Install]:定義由”systemctl enable”以及”systemctl disable”命令在實現服務啟動或禁用時用到的一些選項,可設置為多用戶。
Alias:別名,可使用systemctl command Alias.service
RequiredBy:被哪些units所依賴,強依賴;
WantedBy:被哪些units所依賴,弱依賴;
Also:安裝本服務的時候還要安裝別的相關服務。

 

以754的權限保存后,即可通過 來啟動或停止服務以及配置開機啟動。

systemctl start  shadowsocks      #啟動

systemctl stop shadowsocks       #停止

systemctl restart shadowsocks    #重新啟動

systemctl enable shadowsocks     #開機自動運行

systemctl disable shadowsocks     #禁止開機自動運行

systemctl enable tomcatd.service   #開機自動運行

systemctl start tomcatd                  #啟動

systemctl stop tomcatd                  #停止

 


免責聲明!

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



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