我想知道是否可以在 crontab 中激活多个 cron 作业,但每分钟只有一个作业启动。这里的问题是我希望保留所有其他工作信息的日志,除了这唯一的一个。
Oct 25 14:50:01 dtest CRON[942]: (root) CMD (/usr/bin/python2.7 check.py > /dev/null 2>&1)
目前,我被所有这些行淹没,这让我很好奇 cron 是否能够抑制选定进程的日志条目?
答案1
在使用 cronie 的发行版(例如 CentOS、RHEL、openSUSE、Fedora、Gentoo、Arch 等)上,您可以仅使用 crontab 第一列中的特殊“-”条目。
请注意,这对您的情况没有帮助,因为您使用的是 Debian,它使用 Vixie cron
CentOS 上的用法示例如下。看看工作如何touch /tmp/foo2
做过19:37 开始跑步,但没有在 中记录跑步情况/var/log/cron
。
# crontab -l
* * * * * touch /tmp/foo1
-* * * * * touch /tmp/foo2
# ls -l /tmp/foo*
-rw-r--r--. 1 root root 0 Oct 25 19:37 /tmp/foo1
-rw-r--r--. 1 root root 0 Oct 25 19:37 /tmp/foo2
# grep foo /var/log/cron
Oct 25 19:37:01 instance-2 CROND[12639]: (root) CMD (touch /tmp/foo1)
#
我不确定这是在哪里完整记录的,但是建立这种行为的代码可以在克罗尼源代码
/* check for '-' as a first character, this option will disable
* writing a syslog message about command getting executed
*/
if (ch == '-') {
/* if we are editing system crontab or user uid is 0 (root)
* we are allowed to disable logging
*/
if (pw == NULL || pw->pw_uid == 0)
e->flags |= DONT_LOG;
else {
log_it("CRON", getpid(), "ERROR", "Only privileged user can disable logging", 0);
ecode = e_option;
goto eof;
}
ch = get_char(file);
if (ch == EOF) {
free(e);
return NULL;
}
}
然后引用哪个cronie 源代码中的其他地方
if ((e->flags & DONT_LOG) == 0) {
char *x = mkprints((u_char *) e->cmd, strlen(e->cmd));
log_it(usernm, getpid(), "CMD", x, 0);
free(x);
}