diff --git a/docker.sh b/docker.sh new file mode 100644 index 0000000..14e70ce --- /dev/null +++ b/docker.sh @@ -0,0 +1,130 @@ +#!/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 "安装完成" \ No newline at end of file