服務是應用程式存在的一種形式,靜態的程式(即**)執行成為程序執行於後台,從而執行規定的業務邏輯,對於後端程式而言通常是監聽埠以處理來自客戶端的請求。但這並非是乙個服務,而只是乙個執行於後台的守護程序罷了。服務是對這個程序進行管理,通過服務配置檔案中設定好的一些命令和配置引數,可以對程序的生命週期進行管理和監控。
服務配置檔案(即.service檔案)書寫格式:
[unit]
#服務的描述資訊
description=*** daemon
#本服務依賴的服務,啟動本服務前會檢查並啟動依賴的服務,且只有依賴的服務全都成功啟動,本服務才能啟動
requires=aaa.service bbb.service
#同requires,本服務需要在指定的服務都啟動之後才能啟動
after=111.service 222.service
#本服務需要在指定的服務啟動之前啟動
before=aaa.service bbb.service
[service]
#服務的啟動型別,idle是後台方式啟動
type=idle
#服務啟動命令和停止命令的超時時間,即服務啟動命令和停止命令超時時間都為10s,若不設定超時時間或設定為0,則表示沒有限定超時時間,下同
#timeoutsec=10s
#服務啟動命令的超時時間
timeoutstartsec=10s
#啟動命令的前置命令
execstartpre=/bin/echo "starting service"
#服務管理的應用程式的啟動命令
execstart=/usr/local/bin/dophin
#啟動命令的後置命令
execstartpost=/bin/echo "start done"
#服務停止命令的超時時間
timeoutstopsec=10s
#服務管理的應用程式的停止命令($mainpid是服務管理的應用程式的程序id,下同)
execstop=/bin/kill -9 $mainpid
#停止命令的後置命令
execstoppost=/bin/echo "stop done"
#服務重啟命令
execreload=/bin/kill -1 $mainpid
#服務重啟方式,no表示不重啟,always表示總是嘗試重啟(只有在服務意外掛程式掉的時候會重啟)
restart=always
#服務重啟前的等待時間
restartsec=1s
#停止服務殺死程序的方式,process表示只殺死主程序,即服務管理的應用程式
killmode=process
[install]
#設定只有系統是多使用者的執行方式下才能啟動本服務
wantedby=multi-user.target
上面就是編寫.service配置檔案常見的一些配置引數,並非所有的都需要,根據需要進行設定即可。
編寫完.service之後需要將該配置檔案放到/etc/systemd/system目錄下,然後將服務設定為開機啟動。
#假設服務配置檔案命令dophin.service
#將服務設定為開機啟動
systemctl enable dophin.service
#關閉服務開機啟動
systemctl disable dophin.service
#檢視服務的狀態
systemctl status dophin.service
#啟動服務,對應dophin.service中的execstart
systemctl start dophin.service
#重啟服務,對應dophin.service中的execreload
systemctl restart dophin.service
#停止服務,對應dophin.service中的execstop
systemctl stop dophin.service
systemctl daemon-reload
啟動服務,檢視服務狀態,然後嘗試使用服務管理的應用程式,如果是後端程式的話直接發請求看看能不能成功處理並返回。
#檢視執行日誌(記錄了服務的執行日誌,可以用於服務啟動失敗時的錯誤定位)
journalctl -xe
q:同乙個應用程式被不同的服務進行管理?(即不同服務的啟動命令操作的是同乙個應用程式)a:報錯如下:
解決方案:修改.service讓應用程式只被乙個服務管理即可。
linux service命令解析
我們平時都會用service start來啟動某個程序,那麼它背後究竟執行了什麼?其實service的絕對路徑為 sbin service 開啟這個檔案cat sbin service,我們會發現其實它就是乙個很普通的shell指令碼 root zejin240 cat sbin service b...
linux service命令解析
我們平時都會用service start來啟動某個程序,那麼它背後究竟執行了什麼?其實service的絕對路徑為 sbin service 開啟這個檔案cat sbin service,我們會發現其實它就是乙個很普通的shell指令碼 root zejin240 cat sbin service b...
linux service命令解析
我們平時都會用service start來啟動某個程序,那麼它背後究竟執行了什麼?其實service的絕對路徑為 sbin service 開啟這個檔案cat sbin service,我們會發現其實它就是乙個很普通的shell指令碼 root zejin240 cat sbin service b...