169 lines
4.5 KiB
Bash
169 lines
4.5 KiB
Bash
#! /bin/bash
|
||
# chkconfig: 2345 55 25
|
||
# Description: Startup script for frps on Debian. Place in /etc/init.d and
|
||
# run 'update-rc.d -f frps defaults', or use the appropriate command on your
|
||
# distro. For CentOS/Redhat run: 'chkconfig --add frps'
|
||
#=========================================================
|
||
# System Required: CentOS/Debian/Ubuntu/Fedora (32bit/64bit)
|
||
# Description: Manager for frps, Written by Clang
|
||
# Mender:MvsCode
|
||
#=========================================================
|
||
### BEGIN INIT INFO
|
||
# Provides: frps
|
||
# Required-Start: $all
|
||
# Required-Stop: $all
|
||
# Default-Start: 2 3 4 5
|
||
# Default-Stop: 0 1 6
|
||
# Short-Description: starts the frps
|
||
# Description: starts frps using start-stop
|
||
### END INIT INFO
|
||
|
||
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
|
||
ProgramName="frps"
|
||
ProgramPath="/usr/local/frps"
|
||
NAME=frps
|
||
BIN=${ProgramPath}/${NAME}
|
||
CONFIGFILE=${ProgramPath}/frps.toml
|
||
SCRIPTNAME=/etc/init.d/${NAME}
|
||
version="2024"
|
||
program_version=`${BIN} --version`
|
||
RET_VAL=0
|
||
|
||
[ -x ${BIN} ] || exit 0
|
||
strLog=""
|
||
fun_frps()
|
||
{
|
||
echo ""
|
||
echo "+---------------------------------------------------------+"
|
||
echo "| Manager for ${ProgramName}, Author Clang, Mender MvsCode |"
|
||
echo "+---------------------------------------------------------+"
|
||
echo ""
|
||
}
|
||
|
||
fun_check_run(){
|
||
PID=`ps -ef | grep -v grep | grep -i "${BIN}" | awk '{print $2}'`
|
||
if [ ! -z $PID ]; then
|
||
return 0
|
||
else
|
||
return 1
|
||
fi
|
||
}
|
||
fun_load_config(){
|
||
if [ ! -r ${CONFIGFILE} ]; then
|
||
echo "config file ${CONFIGFILE} not found"
|
||
return 1
|
||
fi
|
||
}
|
||
fun_start()
|
||
{
|
||
if [ "${arg1}" = "start" ]; then
|
||
fun_frps
|
||
fi
|
||
if fun_check_run; then
|
||
echo "${ProgramName} (pid $PID) already running."
|
||
return 0
|
||
fi
|
||
fun_load_config
|
||
echo -n "Starting ${ProgramName}(${program_version})..."
|
||
${BIN} -c ${CONFIGFILE} >/dev/null 2>&1 &
|
||
sleep 1
|
||
if ! fun_check_run; then
|
||
echo "start failed"
|
||
return 1
|
||
fi
|
||
echo " done"
|
||
echo "${ProgramName} (pid $PID)is running."
|
||
return 0
|
||
}
|
||
|
||
fun_stop(){
|
||
if [ "${arg1}" = "stop" ] || [ "${arg1}" = "restart" ]; then
|
||
fun_frps
|
||
fi
|
||
if fun_check_run; then
|
||
echo -n "Stoping ${ProgramName} (pid $PID)... "
|
||
kill $PID
|
||
if [ "$?" != 0 ] ; then
|
||
echo " failed"
|
||
return 1
|
||
else
|
||
echo " done"
|
||
fi
|
||
else
|
||
echo "${ProgramName} is not running."
|
||
fi
|
||
return 0
|
||
}
|
||
fun_restart(){
|
||
fun_stop
|
||
fun_start
|
||
}
|
||
fun_status(){
|
||
PID=`ps -ef | grep -v grep | grep -i "${BIN}" | awk '{print $2}'`
|
||
if [ ! -z $PID ]; then
|
||
echo "${ProgramName} (pid $PID) is running..."
|
||
else
|
||
echo "${ProgramName} is stopped"
|
||
exit 0
|
||
fi
|
||
}
|
||
checkos(){
|
||
if grep -Eqi "CentOS" /etc/issue || grep -Eq "CentOS" /etc/*-release; then
|
||
OS=CentOS
|
||
elif grep -Eqi "Red Hat Enterprise Linux" /etc/issue || grep -Eq "Red Hat Enterprise Linux" /etc/*-release; then
|
||
OS=RHEL
|
||
elif grep -Eqi "Fedora" /etc/issue || grep -Eq "Fedora" /etc/*-release; then
|
||
OS=Fedora
|
||
elif grep -Eqi "Rocky" /etc/issue || grep -Eq "Rocky" /etc/*-release; then
|
||
OS=Rocky
|
||
elif grep -Eqi "AlmaLinux" /etc/issue || grep -Eq "AlmaLinux" /etc/*-release; then
|
||
OS=AlmaLinux
|
||
elif grep -Eqi "Debian" /etc/issue || grep -Eq "Debian" /etc/*-release; then
|
||
OS=Debian
|
||
elif grep -Eqi "Ubuntu" /etc/issue || grep -Eq "Ubuntu" /etc/*-release; then
|
||
OS=Ubuntu
|
||
else
|
||
echo "Unsupported OS. Please use a supported Linux distribution and retry!"
|
||
exit 1
|
||
fi
|
||
}
|
||
fun_config(){
|
||
if [ -s ${CONFIGFILE} ]; then
|
||
vi ${CONFIGFILE}
|
||
else
|
||
echo "${ProgramName} configuration file not found!"
|
||
return 1
|
||
fi
|
||
}
|
||
fun_version(){
|
||
echo "${ProgramName} version ${program_version}"
|
||
return 0
|
||
}
|
||
fun_help(){
|
||
${BIN} --help
|
||
return 0
|
||
}
|
||
|
||
arg1=$1
|
||
[ -z ${arg1} ]
|
||
case "${arg1}" in
|
||
start|stop|restart|status|config)
|
||
fun_${arg1}
|
||
;;
|
||
[vV][eE][rR][sS][iI][oO][nN]|-[vV][eE][rR][sS][iI][oO][nN]|--[vV][eE][rR][sS][iI][oO][nN]|-[vV]|--[vV])
|
||
fun_version
|
||
;;
|
||
[Cc]|[Cc][Oo][Nn][Ff]|[Cc][Oo][Nn][Ff][Ii][Gg]|-[Cc]|-[Cc][Oo][Nn][Ff]|-[Cc][Oo][Nn][Ff][Ii][Gg]|--[Cc]|--[Cc][Oo][Nn][Ff]|--[Cc][Oo][Nn][Ff][Ii][Gg])
|
||
fun_config
|
||
;;
|
||
[Hh]|[Hh][Ee][Ll][Pp]|-[Hh]|-[Hh][Ee][Ll][Pp]|--[Hh]|--[Hh][Ee][Ll][Pp])
|
||
fun_help
|
||
;;
|
||
*)
|
||
fun_frps
|
||
echo "Usage: $SCRIPTNAME {start|stop|restart|status|config|version}"
|
||
RET_VAL=1
|
||
;;
|
||
esac
|
||
exit $RET_VAL
|