[Linux] 使用Systemctl啟動服務Service

現在要把開發好的程式,在Linux系統上自動啟動,可以透過Systemctl來管理,剛好最近的工作需要用到,就來邊紀錄使用過程,順便給需要的人作參考。


首先我們先查查一下Systemctl是什麼東西,在鳥哥的Linux私房菜第十七章很詳細地介紹系統服務,先來了解一下。 看過鳥哥很詳細的地介紹後,知道了整個來龍去脈,以下開始利用一個簡單的範例來做看看。


1. 準備好要執行的程式
    利用一個簡單的websocket server的範例程式,我是用Python的套件SimpleWebSocketServer提供的範例程式,再用pyinstaller打包成一個執行檔 (pyinstaller打包教學),來當作我們服務的主程式。


2. 將範例程式放到/opt
     大家可能會問為什麼要把執行的檔案放到/opt呢?因為這裡頭是我們一般應用程式所放的路徑,避免像放到/usr/bin之類的資料夾與系統程式有所衝突,我把剛剛產生的執行檔放到 /opt/websocket_servet/bin。


3. 製作service檔,並放至/lib/systemd/system/

    製作一個websocket_server.service檔案,內容如下:

[Unit]
Description=Simple Websocket Server
Documentation=https://github.com/dpallot/simple-websocket-server
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/opt/websocket_server/bin/websocket_server   #主程式執行的位置
Restart=on-failure      #程式死掉自動重新啟動

[Install]
WantedBy=multi-user.target


4. Systemctl啟動服務
     
         systemctl daemon-reload                 // 重新載入設定檔
         systemctl enable  websocket_server  // 下次開機就會自動啟動websocket_server
         systemctl restart  websocket_server  //  啟動websocket_server

5. Systemctl停止服務
   
         systemctl stop websocket_server      // 停止websocket_server
         systemctl disable websocket_server  // 下次開機就不會啟動websocket_server
         rm -f /lib/systemd/system/websocket_server.service //刪除設定檔會更乾淨


以上就是建立service的步驟,接下來我們把這些步驟寫成script,幫我們把檔案放到正確的位置,並且開啟服務或是關閉,以便於之後的管理維護,先檢視一下剛剛所用到的檔案如下:


         
 執行檔:bin/websocket_server
 服務設定檔: websocket_server.service
 啟動安裝: post_install.sh
 關閉解除: post_remove.sh


現在來交代一下post_install.sh跟post_remove.sh
post_install.sh:
     cp -rf ../websocket_server /opt/
     cp -f websocket_server.service  /lib/systemd/system/
     systemctl daemon-reload
     systemctl enable websocket_server
     systemctl restart websocket_server

post_remove.sh:
     systemctl stop websocket_server
     systemctl disable websocket_server
     rm -f /lib/systemd/system/websocket_server.service
     rm -rf /opt/websocket_server


接下來就簡單了,馬上來驗證和測試了,準備收工:
sudo ./post_install.sh                              //搬檔案到正確位置並啟動服務
sudo systemctl status websocket_server   //檢查服務是否正確啟動

成功的結果如下:



sudo ./post_remove.sh                          //停止服務並刪除檔案
sudo systemctl status websocket_server

成功的結果如下:




留言

張貼留言

這個網誌中的熱門文章

[Python] 使用 Pyinstaller打包成執行檔

[Python] Websocket Example

[Linux] SSH筆記