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

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

我尝试在cron作业中运行service servicename stop ,但似乎没有如此切换到/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?
任何人都知道这个错误是关于什么?

谢谢

是的,处理这个问题的更好方法是使用像Monit这样的作业控制工具 。 它可以用于CentOS,并且是一个干净的方式,以确保您的守护进程在需要时运行,并可用于按计划启动/停止单个或一组服务(通过cron)…我看到cron的例子在服务窗口内发生什么事情时(应用程序崩溃等)


这里是一个CUPS打印服务的例子…

在一个Monit的configuration文件中,我会有一个定义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命令来处理应用程序的启动和closures。 Monit将确保服务在这些时间内也运行(例如,在中午重启之后)…

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

你得到的Terminated错误可能是一个错误的服务控制脚本…如果它做了像killall servicename它可能会无意中杀死控制脚本,这可能会导致此错误。 您仍然看到错误输出,因为此错误消息来自cron开始运行您的命令的shell,而不是来自命令本身。 如果在这里发生了什么,您可能需要查看init脚本,看看是否可以解决问题。

在debugging错误时,将stdoutstderrredirect到一个文件而不是/dev/null是一个好主意(尽pipe在这种情况下这不会起作用)。