Create Linux service wrapper script
遠端登入 Linux 操作,每次啟動不因遠端登出而關閉的程式 (program),或是關閉上一次運行的程序 (process),都需要輸入許多指令,對於不熟 Linux 新手的我來說,這有點麻煩啊。因此有這懶人包 bash script,一個包裝將程式包裝成 service 的腳本,協助 start/stop/restart process。
使用 nohup 啟用程式,並使用暫存檔記錄該次執行的 pid。當要停止該程序時,讀取該暫存檔 pid,然後關閉該程序 (kill process)。
#!/bin/bash
SERVICE_NAME=My-Service-Name
PATH_BIN=Binary-Path
PID_PATH_NAME=/tmp/AppName-pid
case $1 in
start)
echo "$SERVICE_NAME starting ..."
if [ ! -f $PID_PATH_NAME ]; then
nohup $PATH_BIN &
echo $! > $PID_PATH_NAME
echo "$SERVICE_NAME started ..."
else
echo "$SERVICE_NAME is already running ..."
fi
;;
stop)
if [ -f $PID_PATH_NAME ]; then
PID=$(cat $PID_PATH_NAME);
echo "$SERVICE_NAME stoping ..."
kill $PID;
echo "$SERVICE_NAME stopped ..."
rm $PID_PATH_NAME
else
echo "$SERVICE_NAME is not running ..."
fi
;;
restart)
if [ -f $PID_PATH_NAME ]; then
PID=$(cat $PID_PATH_NAME);
echo "$SERVICE_NAME stopping ...";
kill $PID;
echo "$SERVICE_NAME stopped ...";
rm $PID_PATH_NAME
echo "$SERVICE_NAME starting ..."
nohup $PATH_BIN &
echo $! > $PID_PATH_NAME
echo "$SERVICE_NAME started ..."
else
echo "$SERVICE_NAME is not running ..."
fi
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0
- Line2:服務名稱
- Line3:應用程式位置
- Line4:暫存檔案位置,也是此 bash 判斷服務有沒有運行的依據。假設應用程式是 siyuan,建議是填 /tmp/siyuan-pid
- Line6-15:start,採用 nohup 執行應用程式,避免登出自動關閉應用程式
- Line16-26:stop,從 PID_PATH_NAME 讀取 pid,殺掉應用程式後,刪除該暫存檔
- Line27-41:restart,先 stop 在 start
- Line42-44:當命令無法接受時,輸出提示訊息:僅接受 [start|stop|restart]
之後若將這 script 註冊,讓 linux 開機後執行,就真的是名副其實的服務程式了。
參考來源:serverfault.com
沒有留言: