这个脚本是一个 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
, 等)。 - 如果输入的是无效选项,输出用法提示。
注意事项和改进建议
- 安全性:确保你有足够权限来杀死或重启相应的服务。可能需要用 root 权限执行此脚本。
- sendSMS 实现:建议实现具体发送短信的方法,可以利用第三方 API 或服务,比如 Twilio、SendGrid 等。
- 日志管理:定期清理日志文件以防止占满存储空间,可以加入一些机制限制日志大小或轮转日志。
- 异常处理:增强错误处理能力,比如检测命令是否成功执行等,以避免潜在问题。
- 配置文件路径:如果
.conf
配置文件不在当前目录,可以考虑通过参数传递配置文件路径。
如果你有其他问题或想要更详细的信息,请告诉我!
内容由零声教学AI助手提供,问题来源于学员提问