在哪里放置系统cronjobs?


11

如果我需要在系统级别运行cronjob(即不特定于某个用户),您如何建议我创建它?

  1. crontab -e以root身份运行
  2. 附加到 /etc/crontab
  3. 在以下位置创建定义cronjob的文件 /etc/cron.d/
  4. 创建一个定义cronjob的文件/etc/cron.*ly/(但仅在这样的时间间隔符合我的需要时)

我最担心的是:这些解决方案中的哪一个可能会被系统更新覆盖

另外我猜想如果工作时间长,我应该把它放在一个单独的脚本文件中,例如在/root/bin/。你同意吗?


3
您应该说明您使用的Unix或Linux发行版。
jlliagre 2013年

我现在正在学习:)我认为这是与发行版无关的行为...
蓝蓝的

Answers:


13

不要使用 crontab -e

我不会将其crontab -e作为根。对于其他管理员来说,这通常不太明显,并且随着时间的流逝可能会丢失。将它们放入/etc/crontab您可以准确指定您希望它们运行的​​时间,也可以指定其他用户。

替代地点

如果您不希望以其他用户身份运行脚本,和/或只希望脚本每周,每天等运行,则可以通过多个发行版提供目录,可以在其中放置脚本,这些目录将在特定时间自动处理。

例如,在基于Redhat的发行版中:

$ ls -dl /etc/cron*
drwxr-xr-x. 2 root root 4096 Nov 29 11:06 /etc/cron.d
drwxr-xr-x. 2 root root 4096 Nov 29 11:06 /etc/cron.daily
-rw-------. 1 root root    0 Nov 23 07:42 /etc/cron.deny
drwxr-xr-x. 2 root root 4096 Nov 29 11:03 /etc/cron.hourly
drwxr-xr-x. 2 root root 4096 Nov 29 11:06 /etc/cron.monthly
-rw-r--r--. 1 root root  457 Sep 26  2011 /etc/crontab
drwxr-xr-x. 2 root root 4096 Sep 26  2011 /etc/cron.weekly

我经常会放一些我想在特定时间运行的系统级代码,/etc/cron.d而不是/etc/crontab,尤其是当它们是更复杂的脚本时。

我更喜欢使用下面的目录,/etc/cron*因为它们是其他系统管理员更容易看到的位置,并且此处的文件可以通过软件包安装(例如rpm和/或)进行管理apt

保护条目

我提到的任何目录都用于放置不会被程序包管理器破坏的脚本。如果您担心保护crontab条目,那么我绝对不会将其放在/etc/crontab文件中,而是将其作为适当的脚本放在其中一个/etc/cron*目录中。


1

我会选择#4。它使系统设置可以选择何时运行作业,通常它们会做好“不忙时运行”的工作。更改系统cron调度程序也会自动影响脚本的运行时间。

不利的一面是您无法直接控制其运行时间。如果您需要更多直接控制,请使用#1。

1最不可能被系统更新覆盖。虽然3和4应该很安全。这一切都取决于您如何更新。您的发行版可以根据需要进行更新,但通常只有2个被覆盖的风险。

最后,我将脚本放在/ usr / local / bin中,这是我放置不受发行版软件包管理器管理的系统范围内文件的“常规”位置。/ root / bin如果仅由root运行,也可以接受。但这大部分都是味道。


0

以上任何一项都可以使用,并且以上任何一项均不应被更新覆盖。实际的选择取决于意见-任何三个不同的人通常至少会有两个(如果不是三个)不同的答案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.