比如我要监控mqtt的服务mosquitto
如果这个服务挂了,就马上执行下面的命令
mosquitto -c /etc/mosquitto/mosquitto.conf -d -v
请大佬们指点一下,谢谢
安徽网友:最简单的 下面脚本放到定时任务
- #!/bin/sh
- source /etc/profile
- retDesc=`ps -ef | grep "mosquitto" | grep -v grep`
- retCode=$?
- if [ ${retCode} -ne 0 ];
- then
- echo "`date` restart" >> /root/down.log
- nohup mosquitto -c /etc/mosquitto/mosquitto.conf -d -v &
- else
- echo "server on"
- fi
复制代码
新疆网友:supervisord
湖北网友:百度linux进程守护,很好用,守护进程后,异常终止什么的,会自动给启动
内蒙古网友:一个计划任务,每一段时间查一下
ps -x|grep
看能不能取到进程信息
如果不行就执行命令
或者用systemctl进程守护
restart = on error
上海网友:
新建~/mosquitto.sh
- #!/usr/bin/env bash
- pgrep -f "mosquitto -c /etc/mosquitto/mosquitto.conf -d -v"
- if [[ $? -ne 0 ]]
- then
- mosquitto -c /etc/mosquitto/mosquitto.conf -d -v
- echo "mosquitto is stating"
- else
- echo "mosquitto is running"
- fi
复制代码修改权限
- chmod +x ~/mosquitto.sh
复制代码添加crontab任务,例如每一分钟执行一次
- crontab -e
- */1 * * * * ~/mosquitto.sh > /dev/null 2> /dev/null
复制代码
天津网友:monit 挺好用啊
台湾网友:
- while true; do if ! [[ `ps aux|grep mosquitto |grep -v grep` ]] ;then mosquitto -c /etc/mosquitto/mosquitto.conf -d -v; sleep 10;fi;done;
复制代码
山西网友:大佬,不行啊。。没有成功启动mqtt。。。
澳门网友:monit +1 进程挂了还可以发邮件通知
广东网友:monit +1 进程挂了还可以发邮件通知
江西网友:docker 运行 然后加个–restart=always
云南网友:不用放cron,终端执行不关闭窗口就行
湖南网友:
我的终端结果要关闭的。。
为啥放进cron就不行了呢?我写了日志,是成功执行的。。但是实际上并没有开。。
贵州网友:#!/bin/bash
port=`netstat -nltp | grep 3306 | wc -l`
if [ $port -ne 1 ]
then
systemctl start mysqld
echo "Starting MySQl.. SUCCESS!"
else
echo "MySQL is running."
fi
西藏网友:然后守护程序挂了
西藏网友:mark
内蒙古网友:除非你rm -rf /*
贵州网友:直接上supervisord啊
吉林网友:mark
西藏网友:mark
云南网友:没有任何提示,我看cron的日志也是正常执行的。直接执行脚本也是正常的。但是就是放进cron里面就不行了
安徽网友:
你的意思是直接运行脚本是正常的,
也就是mosquitto运行时输出mosquitto is running
mosquitto未运行的情况会启动mosquitto,并输出mosquitto is stating,
通过运行pgrep -f "mosquitto -c /etc/mosquitto/mosquitto.conf -d -v"查看结果不为0即确实启动了mosquitto
cron不会是用户权限的问题吧,cron添加到/etc/crontab,语句改为
*/1 * * * * root ~/mosquitto.sh > /dev/null 2>&1
重庆网友:应该不是权限问题,我ssh连的就是root账号,而且我看cron的日志里面是有执行这个脚本文件的
重庆网友:crontab只添加mosquitto -c /etc/mosquitto/mosquitto.conf -d -v 这个呢
看能不能正常启动
广西网友:就是不执行脚本?直接执行这个命令?
上海网友:写个systemd,把restart写成always
辽宁网友:啥意思,大佬,咋弄?
湖北网友:嗯
也就是变量控制,来确定是哪部分的问题
北京网友:终于有一个懂得正道的了
四川网友:终于有一个懂得正道的了