严格禁用特定的cron。{每小时,每天,每周}脚本


25

在我管理的各种系统上,都有通过常用/etc/cron.{hourly,daily,weekly}布局运行的cron脚本。我想知道的是,是否存在任何常见的“禁用此脚本”功能。

显然,仅从给定目录中删除某些内容将禁用它,但我正在寻找更永久的解决方案。删除/etc/cron.daily/slocate将可以updatedb在我的家用计算机(我从未使用过的机器)上禁用每夜禁用功能slocate,但是下次我升级slocate软件包时,我确定它会再次出现。

我最感兴趣的两个发行版是Gentoo和OpenSUSE,但我希望有一个广泛使用的机制。我拥有的两个发行版都使用vixie-cron(不确定是否重要)。

Answers:


45

您应该能够chmod -x scriptname禁用脚本,但是将文件保留在原位。


5
包管理系统可能会或可能不会撤消该操作。你可以这样做使这个更强大的chattr +i scriptnamechmod
mc0e

@ mc0e感谢您教给我有关不可变文件的信息,但正如有人曾经说过的那样,它们很可怕。如果我忘记了所做的事情,可能会导致一些非常令人沮丧的麻烦。
乔纳森Y.

2
@JonathanY .:这lsattr就是为了-删除令人恐惧的文件(它列出了文件的属性)。
暂停,直到另行通知。

1
DW可以肯定,但是真正知道要在出现莫名其妙的错误时查看文件属性(就像在我链接到的线程中一样)。
乔纳森Y.

@乔纳森 所以现在您知道了。:-)无论如何,我认为该链接线程中的“可怕”位是针对pacman错误,而不是chattr本身
mc0e,2016年

9

运行部件不会执行名称中带有点的作业,因此

mv /etc/cron.d/job /etc/cron.d/job.disabled

会成功的


1
不幸的是,在升级程序时,这将具有相同的问题-它会检查cron作业是否存在,并且由于它的原始名称不存在,因此将重新创建该作业。
珍妮D说恢复莫妮卡

2
升级程序时回来是正在使用的打包工具的副作用,不能通过简单的方法修复,也不是Cron的错。一些软件包系统核对并铺装以前的文件,另一些软件包系统对新文件和旧文件进行区分,并在需要更改时提示您。无论如何,产生意外行为的更新应该是令人沮丧的,但此时,unix系统管理的常规部分。太多的软件包迁移得太快了,无法定期检查所有更改对它们在每个环境中的影响。
Peelman 2014年

在Debian中,有一个文件转移的概念—即,您可以在仍由包管理器管理的同时有效地重命名该文件。Gentoo和/或SUSE中是否存在类似的机制?
低音

9

通常cron.daily是通过/etc/crontab像这样的行 来调用的

run-parts --report /etc/cron.daily

man run-parts 给您选择。

run-parts --test /etc/cron.daily 显示执行哪些作业而不运行它们。

我更喜欢创建一个“已禁用”子目录,然后将我的工作移到那里。

无论如何,如果您更新软件包,则作业很可能会再次就位,或者已删除的“ x”位将被恢复


1

如果您从未使用过slocate软件包,则可以将其删除。


那只是一个例子,但是还是很好的建议,谢谢。(我认为某些情况可能取决于slocate,但似乎没有。)
benizi 2010年

删除slocate,然后安装mlocate。好多了。
mc0e

1

如果使用cfengine(https://cfengine.com/),则可以禁用此功能。您只需为一组主机编写一个承诺文件,它将在下一次cfagent运行中应用。与木偶或厨师或其他任何人一起做这件事也应该很简单。


有趣。我只是非常切地遇到了配置管理工具。我正在寻找一个通用的“我有一些任意的类Unix系统”解决方案。
benizi 2010年

1

/etc/cron.daily等。等 脚本由称为运行部件的脚本运行。该脚本有所不同。例如,上述--test开关当前不在我正在使用的计算机上。

Run-p​​arts是一个bash脚本。它是用于运行目录中所有脚本(作为参数)的通用工具。它通常在/ usr / bin / run-parts中找到。

它具有决定运行什么的逻辑缠结。该代码保留了您问题的答案,但它也有所不同。因此,为了安全起见,您需要阅读代码。

在我正在查看的版本中,它具有逻辑,当在目录<foo>上工作时,检查<foo> /jobs.deny。如果存在,它将拒绝单独运行该文件中提到的任何脚本。假设您具有此功能,那就太好了,因为在安装或升级安装的软件包时,它可以继续工作。


0

如果处理RHEL及其派生版本(提供crontabs软件包),则可以通过将作业的名称放入jobs.deny文件中来显式禁用该作业。

crontabs / run-parts手册页

可以通过创建文件job.allow或jobs.deny来允许或拒绝文件的执行,该文件的工作方式与其他allow / deny配置文件相似。该文件必须在指定目录中创建。

/etc/cron.daily/jobs.deny 示例可能包含例如0logwatch,它禁止执行此脚本。


-1

如果您也不希望使用用户crontab,只需在服务列表中禁用crond。

在Debian和基于Debian的版本中,这仅仅是从适当的/etc/rcX.d(对于运行级别X)中删除符号链接的问题。

我不知道您如何在SUSE或Gentoo中处理服务。


4
那真是个坏主意。完全禁用cron将禁用有用的维护任务,例如logrotate,updatedb,可能无人值守的升级和标准备份。
东武

Updatedb正是我要禁用的任务(更新slocate的db)。但是,是的,总体上不好的建议。
benizi 2010年

哦对不起。我误解了您的问题,并认为您想禁用所有系统特定的cronjob,而不是单个特定的cronjob。
吉石2010年
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.