2 changed files with 176 additions and 22 deletions
@ -0,0 +1,163 @@ |
|||
#!/bin/bash |
|||
|
|||
# scagent 服务管理脚本 |
|||
# 用于启动、停止、重启和检查 scagent 服务状态 |
|||
|
|||
# 服务名称 |
|||
APP_NAME="scagent" |
|||
# 可执行文件路径 |
|||
APP_PATH="./scagent" |
|||
# PID文件路径 |
|||
PID_FILE="./${APP_NAME}.pid" |
|||
# 日志文件路径 |
|||
LOG_FILE="./${APP_NAME}.log" |
|||
|
|||
# 检查程序是否存在 |
|||
check_app_exists() { |
|||
if [ ! -f "$APP_PATH" ]; then |
|||
echo "错误: 程序 $APP_PATH 不存在,请先编译!" |
|||
exit 1 |
|||
fi |
|||
} |
|||
|
|||
# 检查程序是否在运行 |
|||
is_running() { |
|||
if [ -f "$PID_FILE" ]; then |
|||
PID=$(cat $PID_FILE) |
|||
if ps -p $PID > /dev/null 2>&1; then |
|||
return 0 # 运行中 |
|||
else |
|||
# PID文件存在但进程不存在,删除PID文件 |
|||
rm -f $PID_FILE |
|||
fi |
|||
fi |
|||
return 1 # 未运行 |
|||
} |
|||
|
|||
# 启动服务 |
|||
start() { |
|||
check_app_exists |
|||
|
|||
if is_running; then |
|||
echo "$APP_NAME 服务已经在运行中!" |
|||
exit 0 |
|||
fi |
|||
|
|||
echo "正在启动 $APP_NAME 服务..." |
|||
|
|||
# 以守护进程方式启动应用 |
|||
nohup $APP_PATH -d > $LOG_FILE 2>&1 & |
|||
|
|||
# 记录PID |
|||
echo $! > $PID_FILE |
|||
|
|||
sleep 2 |
|||
|
|||
if is_running; then |
|||
echo "$APP_NAME 服务启动成功!" |
|||
echo "PID: $(cat $PID_FILE)" |
|||
else |
|||
echo "$APP_NAME 服务启动失败!" |
|||
exit 1 |
|||
fi |
|||
} |
|||
|
|||
# 停止服务 |
|||
stop() { |
|||
if ! is_running; then |
|||
echo "$APP_NAME 服务未运行!" |
|||
exit 0 |
|||
fi |
|||
|
|||
echo "正在停止 $APP_NAME 服务..." |
|||
|
|||
PID=$(cat $PID_FILE) |
|||
kill -15 $PID # 发送 SIGTERM 信号 |
|||
|
|||
# 等待进程终止 |
|||
wait_time=0 |
|||
max_wait=10 |
|||
while is_running && [ $wait_time -lt $max_wait ]; do |
|||
sleep 1 |
|||
wait_time=$((wait_time + 1)) |
|||
echo -n "." |
|||
done |
|||
echo |
|||
|
|||
if is_running; then |
|||
echo "强制终止 $APP_NAME 服务..." |
|||
kill -9 $PID |
|||
rm -f $PID_FILE |
|||
else |
|||
rm -f $PID_FILE |
|||
echo "$APP_NAME 服务已停止!" |
|||
fi |
|||
} |
|||
|
|||
# 重启服务 |
|||
restart() { |
|||
echo "正在重启 $APP_NAME 服务..." |
|||
stop |
|||
sleep 2 |
|||
start |
|||
} |
|||
|
|||
# 查看状态 |
|||
status() { |
|||
if is_running; then |
|||
echo "$APP_NAME 服务正在运行中" |
|||
echo "PID: $(cat $PID_FILE)" |
|||
else |
|||
echo "$APP_NAME 服务未运行" |
|||
fi |
|||
} |
|||
|
|||
# 查看日志 |
|||
tail_log() { |
|||
if [ -f "$LOG_FILE" ]; then |
|||
tail -f $LOG_FILE |
|||
else |
|||
echo "日志文件不存在: $LOG_FILE" |
|||
fi |
|||
} |
|||
|
|||
# 显示帮助信息 |
|||
usage() { |
|||
echo "使用方法: $0 {start|stop|restart|status|log}" |
|||
echo " start 启动服务" |
|||
echo " stop 停止服务" |
|||
echo " restart 重启服务" |
|||
echo " status 查看服务状态" |
|||
echo " log 查看日志输出" |
|||
} |
|||
|
|||
# 检查参数 |
|||
if [ $# -eq 0 ]; then |
|||
usage |
|||
exit 1 |
|||
fi |
|||
|
|||
# 根据参数执行相应的命令 |
|||
case "$1" in |
|||
start) |
|||
start |
|||
;; |
|||
stop) |
|||
stop |
|||
;; |
|||
restart) |
|||
restart |
|||
;; |
|||
status) |
|||
status |
|||
;; |
|||
log) |
|||
tail_log |
|||
;; |
|||
*) |
|||
usage |
|||
exit 1 |
|||
;; |
|||
esac |
|||
|
|||
exit 0 |
|||
Loading…
Reference in new issue