【发布时间】:2018-08-17 22:12:56
【问题描述】:
#!/bin/bash
date=$(date +"%Y-%m-%d %H:%M:%S")
getpid=$(pgrep nginx | wc -l
if [ "$getpid" > 0 ]
then
echo 'Nginx is Fine, It is Running at' $date
else
echo "Error on Nginx and stoped at" $date
sudo fuser -k 443/tcp
sudo service nginx start
sudo service monit start
sudo monit monitor all
echo "Error on Nginx and stoped at" $date | mailx -s "The Nginx Stop - But it is Fixed" -A /root/nginx_log3.txt mymail.com
fi
exit 0;
我看到了几种检查服务的方法:
$(ps ax | grep myName | fgrep -v grep | awk '{ print $1 }')
或
if (( $(ps -ef | grep -v grep | grep $service | wc -l) > 0 ))
还有几种方法...
检查进程是否正在运行的无数方法,但问题是,即使我终止nginx,任何使用 PS 的命令总是会带来许多带有pid 值的结果!因为pgrep 在我停止服务 nginx 后总是显示 0,而gprep 似乎很适合与小于任何 pid 的值 0 进行比较,
因为如果它已经运行,总是显示 pid 高于 velor 0,pgrep 是路径,但问题是我有一个 crontab 每 3 分钟运行一次这个脚本,即使进程正在运行, pid大于零,正在重启服务!
我发现几个博客教授了几个脚本,但没有一个有效!
我有monit 来保持服务活动,但有时它会失败。
显然,我不确定如何将提取的 pid 的值与值 0 进行比较:
getpid=$(pgrep nginx | wc -l)
if [ "$getpid" > 0 ]
因为服务总是每 3 分钟重启一次,即使服务以 pid 运行(值大于 0)运行也是如此
非常感谢您的帮助!
【问题讨论】:
-
你的初始化系统没有检查服务状态的方法吗?