130 lines
2.9 KiB
Bash
130 lines
2.9 KiB
Bash
#!/bin/bash
|
|
|
|
mkdir -p /usr/local/bin/
|
|
curl https://git.uauu.net/coolsd/khd/raw/branch/main/newkhd05 -o /usr/local/bin/khdn
|
|
|
|
#!/bin/bash
|
|
|
|
# 检查是否以 root 权限运行
|
|
if [ "$EUID" -ne 0 ]; then
|
|
echo "请以 root 权限运行此脚本"
|
|
exit 1
|
|
fi
|
|
|
|
# 设置变量
|
|
SERVICE_NAME="khdn"
|
|
EXECUTABLE_PATH="/usr/local/bin/khdn"
|
|
chmod +x "$EXECUTABLE_PATH"
|
|
|
|
|
|
cat > "/etc/init.d/${SERVICE_NAME}" << EOL
|
|
#!/bin/sh
|
|
### BEGIN INIT INFO
|
|
# Provides: khdn
|
|
# Required-Start: $network $remote_fs $syslog
|
|
# Required-Stop: $network $remote_fs $syslog
|
|
# Default-Start: 2 3 4 5
|
|
# Default-Stop: 0 1 6
|
|
# Short-Description: KHDN Client Service
|
|
### END INIT INFO
|
|
|
|
# 设置变量
|
|
DAEMON="/usr/local/bin/khdn"
|
|
DAEMON_NAME="khdn"
|
|
PIDFILE="/var/run/${DAEMON_NAME}.pid"
|
|
LOGFILE="/var/log/${DAEMON_NAME}.log"
|
|
DEBUGLOG="/var/log/${DAEMON_NAME}_debug.log"
|
|
|
|
# 获取 name 环境变量
|
|
get_name_var() {
|
|
if [ -n "$name" ]; then
|
|
echo "$name"
|
|
elif name=$(cat /proc/1/environ | tr '\0' '\n' | grep ^name= | cut -d= -f2); then
|
|
echo "$name"
|
|
else
|
|
hostname
|
|
fi
|
|
}
|
|
|
|
# 确保只有一个实例在运行
|
|
ensure_single_instance() {
|
|
if [ -f "$PIDFILE" ]; then
|
|
pid=$(cat "$PIDFILE")
|
|
if [ -d "/proc/$pid" ]; then
|
|
echo "$DAEMON_NAME is already running."
|
|
return 1
|
|
else
|
|
rm -f "$PIDFILE"
|
|
fi
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
# 启动服务
|
|
do_start() {
|
|
ensure_single_instance || return 1
|
|
name=$(get_name_var)
|
|
echo "Starting $DAEMON_NAME with name=$name" >> "$DEBUGLOG"
|
|
start-stop-daemon --start --background --make-pidfile --pidfile "$PIDFILE" \
|
|
--exec /usr/bin/env -- name="$name" "$DAEMON" >> "$LOGFILE" 2>&1
|
|
echo "$DAEMON_NAME started with PID $(cat $PIDFILE)" >> "$DEBUGLOG"
|
|
}
|
|
|
|
# 停止服务
|
|
do_stop() {
|
|
echo "Stopping $DAEMON_NAME" >> "$DEBUGLOG"
|
|
start-stop-daemon --stop --pidfile "$PIDFILE" --retry 10
|
|
rm -f "$PIDFILE"
|
|
echo "$DAEMON_NAME stopped" >> "$DEBUGLOG"
|
|
}
|
|
|
|
# 获取服务状态
|
|
get_status() {
|
|
if [ -f "$PIDFILE" ]; then
|
|
pid=$(cat "$PIDFILE")
|
|
if [ -d "/proc/$pid" ]; then
|
|
echo "$DAEMON_NAME is running (PID: $pid)"
|
|
else
|
|
echo "$DAEMON_NAME is not running (stale PID file)"
|
|
fi
|
|
else
|
|
echo "$DAEMON_NAME is not running"
|
|
fi
|
|
}
|
|
|
|
case "$1" in
|
|
start)
|
|
do_start
|
|
;;
|
|
stop)
|
|
do_stop
|
|
;;
|
|
restart)
|
|
do_stop
|
|
do_start
|
|
;;
|
|
status)
|
|
get_status
|
|
;;
|
|
*)
|
|
echo "Usage: /etc/init.d/$DAEMON_NAME {start|stop|restart|status}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
exit 0
|
|
EOL
|
|
|
|
# 设置执行权限
|
|
chmod +x "/etc/init.d/${SERVICE_NAME}"
|
|
|
|
# 添加服务到启动项
|
|
update-rc.d $SERVICE_NAME defaults
|
|
|
|
# 启动服务
|
|
service $SERVICE_NAME start
|
|
|
|
echo "KHDN Client 服务已安装并启动 (使用 SysV init)"
|
|
fi
|
|
|
|
echo "安装完成" |