使用 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?
任何人都知道这个错误是关于什么的?
谢谢
您应该能够使用
/sbin/service
... 事实上,这是一个养成的好习惯,因为 RHEL/CentOS/etc 的下一个版本可能会使用systemd
而不是遗留/etc/init.d
脚本。如果调用/sbin/service
不起作用,您可能需要查看命令生成的任何错误输出。Terminated
您遇到的错误可能是有问题的服务控制脚本……如果它做了类似killall servicename
的事情,可能会无意中终止控制脚本,从而导致此错误。您仍然看到错误输出,因为此错误消息来自cron
开始运行您的命令的 shell,而不是来自命令本身。如果这是这里发生的情况,您可能需要查看 init 脚本并查看是否可以解决该问题。stdout
调试错误时,有时将and重定向stderr
到文件而不是/dev/null
(尽管在这种情况下这无济于事)是个好主意。是的,处理这个问题的更好方法是使用Monit 等作业控制实用程序。它可用于 CentOS,是确保守护进程在需要时运行的一种干净方式,可用于按计划(通过 cron)启动/停止单个或一组服务......我看到 cron 的示例fall through cracks 是指在服务窗口内发生某些事情(应用程序崩溃等)
这是 CUPS 打印服务的示例...
在某处的 Monit 配置文件中,我有一个定义 CUPS 服务的节,包括它的 PID 以及启动和停止命令。
跑步
monit status
运行
monit stop cups
停止服务...monit start cups
启动它。我通常在 crontab 中添加 monit start 和 stop 命令来处理应用程序的启动和关闭。Monit 将确保该服务也在那些时间运行(例如,在中午重新启动之后)...