Browse Source

增加运行的脚本,可以启停查看状态等

master
xyiege 2 months ago
parent
commit
a3ed8cac91
  1. 35
      aufs/core/sysmonitor.go
  2. 163
      scagent/run.sh

35
aufs/core/sysmonitor.go

@ -6,7 +6,6 @@ import (
"log"
"net/http"
"net/rpc/jsonrpc"
"time"
)
// 返回json数据
@ -36,44 +35,36 @@ func SysMonitor(w http.ResponseWriter, r *http.Request) {
scslist := db.GetlScList(1)
//
var rsdata Syslist
var sinfo SysInfo
// todo 待优化
for _, sc := range scslist {
// 利用channel控制超时
errch := make(chan error, 1)
// 利用jsonrpc 请求结果
// 构建访问的链接
ser := sc.Addr + ":" + sc.Port
go func() {
// 链接服务
client, err := jsonrpc.Dial("tcp", ser)
// 发生错误,执行下一个
if err != nil {
log.Fatalf("Dial SysMonitor failed: %v\n", err)
errch <- err
}
//
defer client.Close()
// 链接服务
client, err := jsonrpc.Dial("tcp", ser)
// 发生错误,执行下一个
if err != nil {
log.Fatalf("Dial SysMonitor failed: %v\n", err)
}
//
defer client.Close()
if client != nil {
// 返回的是pb字符串
var resp string
// 调用远程方法 SysmonitorService.GetSysInfo
client.Call("SysmonitorService.GetSysInfo", nil, &resp)
// 构建json结构的字符串
sinfo := SysInfo{
sinfo = SysInfo{
Addr: sc.Addr,
Port: sc.Port,
Resp: resp,
}
// 添加到rsdata
rsdata.Slist = append(rsdata.Slist, sinfo)
}()
//
select {
case err := <-errch:
log.Printf("SysMonitor failed: %v\n", err)
case <-time.After(5 * time.Second):
log.Printf("SysMonitor timeout: %v\n", ser)
} else {
continue
}
}

163
scagent/run.sh

@ -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…
Cancel
Save