monitor.pid if [ -e server.pid ]; then while true do pid=`cat server.pi...-Go服务器开发" />

ZBLOG

function sendSMS() { } function monitor() { if [ ! -e *.conf ] then echo "no config file" return fi echo $$ > monitor.pid if [ -e server.pid ]; then while true do pid=`cat server.pi...

这个脚本是一个 Bash 脚本,用于监控指定的服务器进程。如果目标进程停止运行,脚本会记录日志、发送 SMS 通知并重启该进程。以下是对脚本每部分的详细解析:

函数定义

function sendSMS() {
}
  • sendSMS 是一个空函数,目前没有实现任何功能。在实际使用中,这个函数可以用于发送短信通知,例如使用 API 来提醒管理员。

监控函数

function monitor() {
    if [ ! -e *.conf ]
    then
        echo "no config file"
        return
    fi
    echo $$ > monitor.pid
  • monitor 函数开始时检查当前目录下是否存在以 .conf 结尾的配置文件。如果没有找到,则输出错误信息并返回。
  • 使用 echo $$ > monitor.pid 将当前脚本的进程 ID (PID) 写入到 monitor.pid 文件中,以便在需要时追踪监控进程。
    if [ -e server.pid ]; then
        while true
        do
            pid=`cat server.pid`  # get pid
            process_count=`ps aux|grep $1|grep $pid|wc -l`
  • 如果存在名为 server.pid 的文件,读取其中的 PID,并在无限循环中检查该进程是否仍然运行。
  • 使用 ps aux | grep $1 | grep $pid | wc -l 来统计与该 PID 对应的进程数量。
            if [ $process_count == 0 ]
            then
                # send a SMS
                sendSMS
                # add log
                date >> restart.log
                echo "server stopped, pid=$pid, process_cnt=$process_count" >> restart.log
                
                # restart server
                ../daeml ./$1 
            fi
            
            sleep 15
        done
    fi 
}
  • 如果检测到对应的进程数量为零,即表示目标服务器已停止,则调用 sendSMS 函数发送短信通知。
  • 然后将当前日期和时间写入 restart.log 日志文件,并记录服务器停止的信息。
  • 使用命令 ../daeml ./$1 重启指定名称的服务。
  • 循环结束前,使用 sleep 15 暂停 15 秒再进行下一次检查。

主程序

case $1 in 
    login_server)
        monitor $1 
        ;;
    msg_server)
        monitor $1 
        ;;
    route_server)
        monitor $1 
        ;;
    http_msg_server)
        monitor $1 
        ;;
    test)
        sendSMS 
        ;;
    *)
        echo "Usage: "
        echo "  ./monitor.sh (login_server|msg_server|route_server|http_msg_server|db_proxy_server|test )"
  • 使用 case 分支语句来处理不同参数 $1 的输入,根据输入启动相应的监控。支持多个服务类型(如 login_server, msg_server, 等)。
  • 如果输入的是无效选项,输出用法提示。

注意事项和改进建议

  1. 安全性:确保你有足够权限来杀死或重启相应的服务。可能需要用 root 权限执行此脚本。
  2. sendSMS 实现:建议实现具体发送短信的方法,可以利用第三方 API 或服务,比如 Twilio、SendGrid 等。
  3. 日志管理:定期清理日志文件以防止占满存储空间,可以加入一些机制限制日志大小或轮转日志。
  4. 异常处理:增强错误处理能力,比如检测命令是否成功执行等,以避免潜在问题。
  5. 配置文件路径:如果 .conf 配置文件不在当前目录,可以考虑通过参数传递配置文件路径。

如果你有其他问题或想要更详细的信息,请告诉我!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处: monitor.pid if [ -e server.pid ]; then while true do pid=`cat server.pi...">https://golang.0voice.com/?id=18862

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?