更改crontab文件后如何重新启动cron?

577

在更改crontable文件后,我是否需要重新启动cron?


11
不是忽视@leonbloy的回答,但我发现在我的Linux系统中实现第一个按分钟格式正确的cron作业直到系统重启后才开始运行。没有测试sudo service cron restart命令。 - geotheory
4
哎呀,我真希望每次更新我的定时任务表(crontab)时不必重启生产服务器(并且确实不需要这样做)。 - jcollum
12个回答

813

不需要。

根据cron手册描述:

...然后cron将检查所有crontab的修改时间并重新加载那些已更改的文件。因此,每当修改crontab文件时,无需重新启动cron。

但如果您仍想确保它被执行,

sudo service cron reload
或者
/etc/init.d/cron reload

13
如果使用cron.d文件夹,则符号链接的crontab不会重新加载。我如何强制重新加载? - CMCDragonkai
16
啊,这很简单。现在是 sudo service cron restart - CMCDragonkai
22
更好的选择是重新加载-它可以由非root用户启动: /etc/init.d/cron reload - Honza
15
或许是使用 crond 而不是 cron - Cees Timmerman
60
这个答案唯一的问题是它并不总是正确的。请看问题下面geotheory的评论。我也碰到过这种情况。我通过 sudo crontab -e 改变了crontab文件,通过 Ctrl + X 保存了更改,然后离开并假设 cron 会接收到更改(因为这个答案得到了如此高的赞同)。然后,几天后我的客户报告说 cron 仍然按照旧周期运行。所以,老实说,如果你想保险起见,只需重新启动 cron 或系统,并且不要浪费时间进行测试,尽管这个得到了高票的答案。 - Dan Nissenbaum
显示剩余5条评论

78
在安装有cPanel的CentOS系统上,使用命令sudo /etc/init.d/crond reload可以完成任务。
在CentOS7上,则需要使用命令sudo systemctl start crond.service

5
感谢CentOS 7提供的支持。 - Mathieu de Lorimier
4
要重新加载 crond,而不仅仅是在越来越糟糕的systemd上启动它,请运行 sudo systemctl reload crond.service - Nathan Basanese
1
@NathanBasanese 在 SystemD 上重新加载 cron 现在被认为是黑魔法:在 Ubuntu 18.04 上使用 sudo systemctl reload crond 将会失败并显示 Failed to reload cron.service: Job type reload is not applicable for unit cron.service.。现在我们都被这种综合症所困扰: "SystemD,只能有一个"。如果重载不是在幕后自动进行的,那么你就完了!甚至不要想着像过去的三十年那样去修复它!请看: Windows 的世界终于吞噬了 Debian:如果引擎盖下出现了奇怪的东西,你会怎么做?重启! - Tino
重启不仅仅是重新加载。Centos 没有可用的干净重新加载选项吗? - Ωmega
@Tino,你可以安装cronie。 - Bob

45

我在16.04 VPS Digital Ocean上遇到了类似的问题。如果你正在更改crontabs,请确保运行以下命令:

sudo service cron restart 

1
我认为只需要使用“reload”就可以了,不需要“restart”。谢谢 :) - Tien Nguyen
1
在我的情况下,使用树莓派Zero和更改/var/spool/cron/crontabs/root文件,我不得不使用“restart”。 - mikep
在一台旧的 openSUSE 10 机器上,我遇到了与 @mikep 相同的问题。只有 restart 起作用。 - mgutt

21

RHEL/Fedora/CentOS/Scientific Linux 用户命令

  1. 启动cron服务

    • 要启动cron服务,使用:/etc/init.d/crond start

    • 或者RHEL/CentOS 5.x/6.x用户: service crond start

    • 或者RHEL/Centos Linux 7.x用户: systemctl start crond.service

  2. 停止cron服务

    • 要停止cron服务,使用:/etc/init.d/crond stop

    • 或者RHEL/CentOS 5.x/6.x用户: service crond stop

    • 或者RHEL/Centos Linux 7.x用户: systemctl stop crond.service

  3. 重启cron服务

    • 要重启cron服务,使用:/etc/init.d/crond restart

    • 或者RHEL/CentOS 5.x/6.x用户: service crond restart

    • 或者RHEL/Centos Linux 7.x用户: systemctl restart crond.service

Ubuntu/Mint/Debian基于Linux发行版的用户命令

  1. 启动cron服务

    • 要启动cron服务,使用:/etc/init.d/cron start

    • 或者sudo /etc/init.d/cron start

    • 或者sudo service cron start

  2. 停止cron服务

    • 要停止cron服务,使用:/etc/init.d/cron stop

    • 或者sudo /etc/init.d/cron stop

  3. Debian停止cron服务

    • 要停止cron服务,请使用:/etc/init.d/cron stop

    • 或者sudo /etc/init.d/cron stop

    • 或者sudo service cron stop

  4. Debian重启cron服务

    • 要重启cron服务,请使用:/etc/init.d/cron restart

    • 或者sudo /etc/init.d/cron restart

    • 或者sudo service cron restart

来源:https://www.cyberciti.biz/faq/howto-linux-unix-start-restart-cron/


2
这似乎根本没有试图回答页面顶部的问题。请查看[帮助],特别是如何撰写好答案? - tripleee

17

根据发行版的不同,“cron reload”可能没有任何作用。要从init.d/cron(debian squeeze)中粘贴片段:

reload|force-reload) log_daemon_msg "Reloading configuration files for periodic command scheduler" "cron"
    # cron reloads automatically
    log_end_msg 0
    ;;

某些开发人员/维护人员依赖于重新加载,但实际上并没有重新加载,在这种情况下没有强制重新加载的方法。我将我的crontab文件作为部署的一部分生成,除非文件长度发生变化,否则更改不会被重新加载。


也许在禁用服务重新加载的系统中,HUPping进程是有效的? - teknopaul

13
  1. 如果使用SFTP客户端编辑文件/var/spool/cron/crontabs/root - 需要执行命令 service cron restart 来重新加载。重新载入服务无效。

  2. 如果通过Linux控制台(nano、mc等)编辑文件/var/spool/cron/crontabs/root - 不需要重新启动。

  3. 如果通过crontab -e编辑计划任务 - 不需要重新启动。


12

尝试在CentOS 7上使用以下命令重新加载服务:service crond reload


1
或者 systemctl reload crond - pooya13

7
尝试一下这个:sudo cron reload。在我的ubuntu 12.10上有效。

1
在我的搭载Ubuntu 18.04.2 LTS的Raspberry Pi 3+上无法运行。 - Jan

5
尝试这个命令:service crond restart,因此应该使用crond而不是cron

5
“crond”未被识别为服务。对我来说,使用“cron”是可以工作的。我的操作系统是Ubuntu 18.04。 - Tien Nguyen

3

有时候需要重新启动cron才能使启动脚本正常工作,这并不会有什么问题。

sudo service cron restart


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