最近服务器没有太多任务,在研究运维的东西,自动化部署,服务监控等等
想做一个脚本去监视服务的运行状态,如果服务因为不可知原因挂掉,即使无人看守,也能在最短时间内自己重新部署,将影响降至最低,避免深夜无人值守服务器告警无人处理的局面
脚本如下:
#!/bin/bash
# 根据配置文件获取到占用端口的配置信息并取出端口号
# 因为配置文件的编码问题,有可能取到的值会伴随着"/r",我们使用 tr -d '\r'去除"/r"
port=`sed '/^websocket_port=/!d;s/.*=//' conf/gameParams.properties | tr -d '\r'`
# 根据占用端口号搜索进程的pid
pid=`netstat -tnlp | egrep $port |awk '{sub("/java","",$7);print $7}'`
if [ ! -n "$pid" ];then
# 如果服务异常结束,输出重新部署的时间,根据时间排查案发时间的服务器日志,准确定位
echo `date +%Y-%m-%d %H:%M:%S` "server is not running, reboot now..." >> monitor.log
# 启动服务
# startServer
else
echo "server is running!"
fi
至此,脚本编写完成,下一步,加入系统定时任务,当然也可以选择在脚本中使用循环,休眠来实现监控服务的目的,但是我并不喜欢循环所以选择定时任务
在此之前记得将刚才编写的脚本添加执行权限
# 添加脚本执行权限为所有用户可读写
chmod 777 /bin/startServer.sh
命令使用crontab
如果没有安装可以使用yum/rpm/brew等工具安装crontabs
-y自动安装依赖
# 安装crontabs
yum install crontabs -y
# 打开调度任务
crontab -e
# 在编辑器中添加cron表达式正则以及定时脚本路径
# 每五分钟检查一次服务运行状态,保存退出,重新载入配置
*/5 * * * * /bin/startServer.sh
# 重新载入配置:
systemctl reload crond.service
# 查看crontab服务状态:
service crond status
# 重启服务:
systemctl restart crond.service
# 列出当前的所有调度任务:
crontab -l
现在,所有的准备工作就完成了,服务器就可以自动检查服务状态并愉快的自动部署啦!