如何通过Cron任务或脚本检查守护进程服务是否正在运行?

4
如何设置定时任务来监视运行相同守护程序脚本(服务)的多个树莓派(通过SSH)?
我考虑使用定时任务监控服务状态,并在服务器上写入文件,如果服务状态是活动或非活动,则可以稍后使用该文件的内容将Cron作业的结果显示到Web页面上(但这是我以后要解决的问题)。
如果有人能够使用不同的工具(例如bash脚本、python脚本、PHP等)找到更简单的方法,我也很乐意尝试。
2个回答

2

关于您的问题:

如何检查守护进程服务是否正在运行

在RHEL/CentOS v4.x/5.x/6.x和旧版本的Fedora Linux中验证Cron服务,您可以使用以下任何一条命令来查看crond是否正在运行:

$ pgrep crond

或者

$ service crond status

示例输出:

# crond (pid 4370) is running...

如果没有运行,请输入以下两个命令来启动crond:

$ chkconfig crond on
$ service crond start

通过查看日志文件来验证cron是否正在运行,输入以下命令:

$ tail -f /var/log/cron

关于CentOS/RHEL v7.x+和最新版本的Fedora Linux
您需要使用以下命令来查找crond是否正在运行:
$ systemctl status crond.service

样例输出:
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled)
   Active: active (running) since Tue 2015-05-19 14:53:32 EDT; 3min 7s ago
 Main PID: 1292 (crond)
   CGroup: /system.slice/crond.service
           └─1292 /usr/sbin/crond -n

如果没有运行配置,则需要将crond服务设置为自动启动:

$ sudo systemctl enable crond.service
$ sudo systemctl start crond.service

关于Debian/Ubuntu Linux(旧版本)的Cron服务的说明 在Debian和Ubuntu Linux中,cron服务将其操作记录在syslog设施中,即使用 /var/log/messages 文件:
$ tail -f /var/log/messages

查看 cron 守护进程是否正在运行,输入以下命令:

$ pgrep cron

如果未运行,请启动它,输入:

$ update-rc.d cron defaults
$ /etc/init.d/cron start

关于Debian Linux v8.x+和最新版本的Ubuntu Linux 要检查cron服务是否在运行,语法如下:
# systemctl status cron

示例输出:

â— cron.service - Regular background program processing daemon
   Loaded: loaded (/lib/systemd/system/cron.service; enabled)
   Active: active (running) since Tue 2015-05-19 11:49:32 IST; 12h ago
     Docs: man:cron(8)
 Main PID: 1053 (cron)
   CGroup: /system.slice/cron.service
           ├─1053 /usr/sbin/cron -f
           └─3020 /usr/bin/atop -a -w /var/log/atop/atop_20150520 600

如果没有运行,请配置crond服务在启动时自动启动:
$ sudo systemctl enable cron.service
$ sudo systemctl start cron.service

0

我尝试了许多答案(包括这个页面上的答案),但是没有一个代码适用于nginx。

我不知道为什么即使其中一些代码成功地发现它已经关闭了,但它们都无法启动nginx服务。

唯一有效的解决方法是:

添加一个带有代码的bash脚本文件:

(我将代码添加到文件/opt/nginxstartifdown.sh中)

#!/bin/bash

service=$@
/bin/systemctl -q is-active "$service.service"
status=$?
if [ "$status" == 0 ]; then
    echo "OK"
else
    /bin/systemctl start "$service.service"
fi

将此添加到cron作业sudo crontab -e

* * * * * /opt/nginxstartifdown.sh nginx > /dev/null

参考来源:(非本网站,非本人内容)https://maslosoft.com/kb/watching-for-service-with-cron/

分享此内容以帮助那些想要在nginx关闭时重新启动它的人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接