在 crontab 中停止/启动服务时出现 CentOS 5 cron 错误

在 crontab 中停止/启动服务时出现 CentOS 5 cron 错误

使用 cron 按计划停止/启动特定服务的最佳方法是什么?

我尝试运行service servicename stop一个 cron 任务,但似乎不起作用,所以我改用/etc/init.d/servicename

0 19 * * * /etc/init.d/servicename stop >/dev/null 2>&1
0 7 * * * /etc/init.d/servicename start >/dev/null 2>&1

看起来这有效,但不确定效果如何。
但奇怪的是,我收到一封来自 cron 的电子邮件,其中有以下错误:

/bin/sh: line 1: 20178 Terminated  /etc/init.d/servicename start > /dev/null 2>&1

我似乎只在启动服务时遇到此错误。停止服务似乎没问题。

我还认为应该>/dev/null 2>&1禁止通过电子邮件发送通知。不过,在这种情况下,我很高兴它没有这样做。

有谁知道更好的按计划停止/启动服务的方法吗,希望使用 cron?
有谁知道这个错误是怎么回事吗?

谢谢

答案1

是的,处理这个问题的更好方法是使用作业控制实用程序(例如 Monit)它适用于 CentOS,是一种干净的方式来确保您的守护进程在需要时运行,并可用于按计划启动/停止单个或一组服务(通过 cron)...我看到 cron 失败的例子是当服务窗口内发生某些事情时(应用程序崩溃等)。


这是 CUPS 打印服务的一个示例...

在某个 Monit 配置文件中,我会有一个定义 CUPS 服务的节,包括其 PID 和启动和停止命令。

check process cups
        with pidfile "/var/run/cupsd.pid"
        start program = "/sbin/service cups start"
        stop program = "/sbin/service cups stop"

跑步monit status

Process 'cups'
  status                            Running
  monitoring status                 Monitored
  pid                               2357
  parent pid                        1
  uptime                            8d 6h 43m 
  .
  .     
  data collected                    Mon, 13 Aug 2012 09:07:03

运行monit stop cups停止服务...

Process 'cups'
  status                            Not monitored
  monitoring status                 Not monitored
  data collected                    Mon, 13 Aug 2012 09:08:03

monit start cups启动它。我通常在 crontab 中添加 monit start 和 stop 命令来处理应用程序的启动和关闭。Monit 将确保服务在这些时间也在运行(例如中午重启后)...

答案2

您应该能够使用/sbin/service...事实上,这是一个好习惯,因为 RHEL/CentOS/etc 的下一个版本可能会使用它systemd来代替旧/etc/init.d脚本。如果调用/sbin/service不起作用,您可能需要查看命令生成的任何错误输出。

Terminated您收到的错误可能是服务控制脚本存在错误...如果它执行了类似操作,可能killall servicename会无意中终止控制脚本,从而导致此错误。您仍然看到错误输出,因为此错误消息来自开始cron运行命令的 shell,而不是来自命令本身。如果这是这里发生的情况,您可能需要查看 init 脚本并查看是否可以解决问题。

当调试错误时,有时将 重定向到文件而不是 是一个好主意stdoutstderr尽管/dev/null在这种情况下这没有帮助)。

相关内容