【问题标题】:How to check if a daemon service is running via Cron job or script?如何通过 Cron 作业或脚本检查守护程序服务是否正在运行?
【发布时间】:2018-08-09 16:44:15
【问题描述】:

如何设置 cron 作业来监控多个运行同一守护程序脚本(服务)的 PI​​(通过 SSH)?

我正在考虑使用 cron 作业来监控服务状态,并在服务状态为活动或非活动时写入服务器上的文件,然后我可以稍后使用该文件的内容来显示结果将 Cron 作业复制到网页上(但我稍后会弄清楚)。

如果有人可以使用不同的工具找到更简单的方法,我愿意接受其他选择,例如bash 脚本、python 脚本、PHP 等,

【问题讨论】:

    标签: php python bash cron daemon


    【解决方案1】:

    关于你的问题

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

    在 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
    

    【讨论】:

      【解决方案2】:

      我尝试了很多答案(也包括在此页面上),但没有一个代码适用于 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 关闭时打开它的人。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-22
        • 1970-01-01
        相关资源
        最近更新 更多