LINUX 用systemctl 託管程式

2021-10-10 12:58:47 字數 3191 閱讀 8017

系統 centos 7

能夠開機啟動

能夠一鍵開啟,關閉,重啟

注意檔案編碼的問題

[unit]

description=service

after=network.target

[service]

## 可以包含的值為******、forking、oneshot、dbus、notify、idel其中之一。

## type=forking

## 守護程序的pid檔案,必須是絕對路徑,強烈建議在type=forking的情況下明確設定此選項

## pidfile=/project/frp_0.19.0_linux_amd64

## 設定啟動服務是要執行的命令(命令+引數)

execstart=/project/frp_0.19.0_linux_amd64/systemctl-frps start

## execstop=

## execreload=

## 當服務程序正常退出、異常退出、被殺死、超時的時候,是否重啟系統該服務。程序通過正常操作被停止則不會被執行重啟。可選值為:

## no:預設值,表示任何時候都不會被重啟

## always:表示會被無條件重啟

## no-success:表示僅在服務程序正常退出時重啟

## on-failure:表示僅在服務程序異常退出時重啟

## 所謂正常退出是指,退出碼為「0」,或者到ighup, sigint, sigterm, sigpipe 訊號之一,並且退出碼符合 succes***itstatus= 的設定。

## 所謂異常退出時指,退出碼不為「0」,或者被強殺或者因為超時被殺死。

restart=on-abort

#重啟時間間隔無限制

startlimitinterval=0

[install]

wantedby=multi-user.target

檔案放到 /usr/lib/systemd/system/ 下

service 部分的啟動、重啟、停止命令全部要求使用絕對路徑

如果單獨執行的是命令,這個就已經足夠了,但是如果執行一些守護程序的話或者更複雜的情況的話,需要單獨寫乙個指令碼來執行

關於 service 裡面的詳細配置可以參考: 

#!/bin/bash

#set service name

service_name=frpserverservice

bin_file_name=frps

# set basic executable environment, do not modify those lines

bin_home=$(dirname $0)

if [ "$" = "." ]; then

bin_home=$(pwd)

ficd $

#the service pid

pid=`ps -ef|grep $service_name|grep -v grep|grep -v kill|awk ''`

start() already start with pid :$pid"

return 0

finohup ./$bin_file_name -c ./$bin_file_name.ini >/dev/null 2>&1 &

echo "starting $service_name : "

pid=`ps -ef|grep $service_name|grep -v grep|grep -v kill|awk ''`

if [ $ ]; then

echo "start $ successfully with pid: $"

else

echo "start $ failed"fi}

debug() ]; then

kill -9 $pid

fi./$ -c ./$.ini

}stop() ]; then

echo "service $service_name already stopped"

else

kill -9 $pid

echo -n "shutting down $service_name : "

check_pid=`jps | grep $|grep -v grep|awk ''`

while [ -n "$" ]

docheck_pid=`jps | grep $|grep -v grep|awk ''`

if [ -z "$" ];then

break;

fidone

echo "stop $ with pid: $"fi}

status() |grep -v grep|awk ''`

if [ -n "$pid" ] ;then

echo "service $service_name (pid $pid) is running ..."

else

echo "service $service_name is stopped"fi}

# see how we were called.

case "$1" in

start)

start

;;stop)

stop

;;status)

status

;;restart)

stop

start

;;debug)

debug

;;*)

echo $"usage: $0 "

exit 2

esac

上面這個指令碼是乙個模板,包括了start,stop,status,restart,debug各個命令,是可以直接傳參執行的

在乙個檔案上的 execstart= 就可以執行指令碼檔案 並傳入 start 引數

注意: 如果執行的是守護程序的話,type=forking 要配置上,意指 execstart 命令裡面執行程序才是主程序

啟動服務:systemctl start servicename

停止服務:systemctl stop servicename

服務狀態:systemctl status servicename

專案日誌:journalctl -u servicename

開機啟動:systemctl enable servicename

Ubuntu上用systemctl實現隨機啟動

在ubuntu 16.04 lts中,etc init.d已被 usr lib systemd所取代 貌似15.04就已經轉用了 指令碼仍然可以啟動和停用服務。但預設用的命令現在是 systemctl 而不是chkconfig命令.當然你可以自己安裝chkconfig命令,來支援舊配置。換方之,ub...

linux筆記之systemctl命令

通過systemctl來管理單一服務的啟動 開機啟動和狀態檢視。systemctl command unit command主要有 start 立刻啟動unit stop 立刻關閉unit restart 立即重啟 enable 開機啟動 disable 開機不啟動 is active 當前有沒有在...

Linux上的Systemctl命令

linuxsystemctl是乙個系統管理守護程序 工具和庫的集合,用於取代system v service和chkconfig命令,初始程序主要負責控制systemd系統和服務管理器。通過systemctl help可以看到該命令主要分為 查詢或傳送控制命令給systemd服務,管理單元服務的命令...