最近在搞MQTT,但是不知道为什么,服务器的MQTT服务有时候会自动退出。于是想找个办法自动监控一下,之前找了个方法是写了个死循环的脚本,每隔几秒就检测一次,结果发现服务器的CPU占用率变得非常大。平时不开这个监控脚本的时候占用才1%不到,开了脚本后占用达到70%多。
于是想换一个方法来实现,目前是想到用crontab定时任务来实现,但是最少是1分钟执行一次。
先建个bash脚本文件,我这里是保存在/check_mqtt.sh,内容如下:
if ! [[ `ps aux|grep mosquitto |grep -v grep` ]] ;then /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf -d; fi;
添加执行权限
chmod +x check_mqtt.sh
添加系统定时任务
crontab -e
添加任务,每分钟检查一次
*/1 * * * * bash /root/check_mqtt.sh
这里有个坑,我之前一直没搞明白,那就是在check_mqtt.sh脚本里面,我原来写的是:if ! [[ `ps aux|grep mosquitto |grep -v grep` ]] ;then mosquitto -c /etc/mosquitto/mosquitto.conf -d; fi;
原来的内容是没有指定/usr/sbin/这个路径的,结果发现直接执行check_mqtt.sh就可以成功启动mosquitto,但是一放到crontab任务里面就不行了。后面在网上问了大神,才知道必须写完整路径才行,要不然crontab里面没有引入环境变量之类的,会找不到程序。
ok
mjj通道