可以禁用或隐藏有关启动一个特定进程的 CRON 通知

可以禁用或隐藏有关启动一个特定进程的 CRON 通知

我想知道是否可以在 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);
}

相关内容