Possibilidade de desativar ou ocultar a notificação CRON sobre como iniciar um processo específico

2

Boa noite, minha pergunta é como o título indica. Eu queria saber se é possível ter várias tarefas agendadas no crontab ativo, mas apenas uma delas inicia cada minuto. O problema aqui é que eu gostaria de manter o registro de todas as outras informações de empregos, com exceção desta única.

Oct 25 14:50:01 dtest CRON[942]: (root) CMD (/usr/bin/python2.7 check.py > /dev/null 2>&1)

Atualmente estou sendo inundado com todas essas linhas, o que me deixa curioso se o cron é capaz de suprimir uma entrada de log para processos selecionados?

    
por RedS 25.10.2018 / 21:03

1 resposta

1

Em distribuições usando o cronie (por exemplo, CentOS, RHEL, openSUSE, Fedora, Gentoo, Arch etc), você pode simplesmente usar a entrada especial "-" na primeira coluna do crontab.

Note que isso não ajuda na sua situação, já que você está no Debian, que usa o Vixie cron

Exemplo de uso, no CentOS, abaixo. Veja como o trabalho para touch /tmp/foo2 foi executado às 19:37 mas não registrou a execução em /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)
#

Não sei onde isso está totalmente documentado, mas o código que estabelece esse comportamento pode ser visto em código fonte do cronie

/* 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;
    }
}

Que é então referenciado em outros lugares no código-fonte do 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);
}
    
por 25.10.2018 / 21:40