轉載地址:https://blog.csdn.net/jeccisnd/article/details/103166554/
linux 的systemctl是一個系統服務管理工具,當我們想使用這個工具來管理服務,也是比較簡單的。請看例子:
我想把一個java程序ibot寫到系統服務里:
-
#[Unit]部分主要是對這個服務的說明,內容包括Description和After,Description
-
#用於描述服務,After用於描述服務類別
-
[Unit]
-
Description=iBot Service
-
After=syslog.target
-
-
#[Service]部分是服務的關鍵,是服務的一些具體運行參數的設置,這里Type=forking
-
#是后台運行的形式,PIDFile為存放PID的文件路徑,ExecStart為服務的具體運行命令,
-
#ExecReload為重啟命令,ExecStop為停止命令,PrivateTmp=True表示給服務分配獨
-
#立的臨時空間,注意:[Service]部分的啟動、重啟、停止命令全部要求使用絕對路徑,使
-
#用相對路徑則會報錯!
-
#StandardOutput=null 是將程序業務日志輸出到空,也可以指定文件,或者交給journal處理
-
-
[service]
-
Type=forking
-
ExecStart=/usr/local/java/bin/java -jar /usr/local/services/iBot-1.0.0-version.jar
-
SuccessExitStatus=143
-
ExecStop=/usr/bin/kill -15 $MAINPID
-
StandardOutput=null
-
#StandardOutput=/tmp/services/logs/iBot/iBot-run.log
-
-
#[Install]部分是服務安裝的相關設置,可設置為多用戶的
-
[Install]
-
WantedBy=multi-user.target
其中,StandardOutput=null是我遇到過的問題,程序的日志交由journal處理后,journal把日志寫到了系統日志。日志產生了混亂。所以可以通過StandardOutput=null來控制,把日志輸出關閉。或者寫對別的文件里去。常見的參數有:
StandardInput=null
StandardOutput=inherit
StandardError=inherit
我們也可以通過systemctl show iBot 來查看相關服務的信息