Por que meu cron job não está agendado?

0

Estou tentando configurar um cron job, criando um arquivo /etc/cron.d/myjob :

55 * * * * t echo hello > /tmp/cron.log  && cd /tmp/test/ && pwd > /tmp/cron.log

Eu tentei verificar se o trabalho está agendado com sucesso, usando os redirecionamentos. Eu criei o arquivo às 21:50, e quando 5 minutos depois, ou seja, é 21:55, ainda não há /tmp/cron.log criado. Eu estava me perguntando por quê?

Eu especifico o usuário como t para o trabalho em /etc/cron.d/myjob . Mas quem é o trabalho do cron? Eu não tenho certeza sobre isso, então eu tentei os dois comandos abaixo. Nem mostra o trabalho que criei.

$ crontab -l
no crontab for t
$ sudo crontab -l
[sudo] password for t: 
no crontab for root

Meu / etc / crontab não lê explicitamente os arquivos em /etc/cron.d/. Ver abaixo. Essa pode ser a razão pela qual meu cron job não está em execução? Obrigado.

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the 'crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

Atualização:

Obrigado ao Jeff. altere a permissão em /etc/cron.d/myjob para rw-r--r-- resolve o problema. Por que a permissão rw-rw-r-- original do meu arquivo de trabalho não funciona, mas rw-r--r-- é necessário? Os arquivos em /etc/cron.d/ e /etc/cron.daily/ devem ter as mesmas permissões rw-r--r-- ?

Por que /etc/crontab não precisa ler explicitamente os arquivos em /etc/cron.d/ ?

    
por Tim 30.10.2018 / 02:59

1 resposta

5

Q1

Why does the original rw-rw-r-- permission of my job file not work

De man cron :

/etc/crontab and the files in /etc/cron.d must be owned by root, and must not be group- or other-writable.

Assim, os arquivos dentro de /etc/cron.d devem ser:

chown root:root /etc/cron.d/*
chmod go-wx /etc/cron.d/*
chmod -x /etc/cron.d/*

Q2

Why does /etc/crontab not need to explicitly read the files under /etc/cron.d/?

Não, não é isso que diz. O que man 5 crontab diz é:

/etc/crontab: system-wide crontab Unlike any other crontab you don't have to run the 'crontab' command to install the new version when you edit this file and files in /etc/cron.d. These files also have username fields, that none of the other crontabs do.

O que isso significa é que não há necessidade de executar crontab -e para editar e instalar um novo trabalho agendado. Que os arquivos em /etc/cron.d/ são lidos e interpretados por cron assim que são editados. E os trabalhos definidos dentro são executados como planejados sem chamar o executável crontab .

Aviso

Mas você também deve ler a partir de man cron :

In general, the system administrator should not use /etc/cron.d/, but use the standard system crontab /etc/crontab.

Isso significa executar um crontab -e para criar trabalhos agendados.

A edição de /etc/crontab (ou /etc/cron.d files) diretamente é uma má ideia em geral e para novos usuários especialmente. Acostume-se a gerenciar tarefas agendadas com crontab -e e crontab -l e, depois de um tempo (longo), você poderá tentar entender o que o /etc/crontab faz.

Relacionadas

editar

Desde que você está perguntando:

Can crontab -e create cron jobs in /etc/cron.d/?

Não, não foi isso que eu quis dizer. Tarefas Cron (para usuários) vivem em /var/spool/cron/crontabs (em distros do tipo debian). É aí que o comando crontab -e as edita.

O que geralmente é editado (antes) em /etc/crontab é o system jobs, os jobs que os pacotes instalados (como o anacron) usam para agendar seus próprios jobs. Isso não é um arquivo que os usuários devem editar. No debian, existe um diretório para adicionar novos trabalhos que evita o problema de cometer erros no arquivo editado ( /etc/crontab ). Esse diretório é /etc/cron.d/ . Mas ainda assim, isso não é um diretório destinado a usuários (até mesmo o administrador) para editar manualmente.

Isso é semelhante a perguntar por que um usuário não deve editar o arquivo /etc/sudoers .

É claro que um usuário (como root) pode executar nano /etc/sudoers e alterar o arquivo. O sistema não irá bloquear a raiz. Mas isso é uma "má ideia".

O manual do crontab é enganador no sentido de que foi escrito para falar com desenvolvedores (não usuários). Explica o que um desenvolvedor deve fazer nesses arquivos.

Por que

Sobre: por que você acha que precisa adicionar /etc/crontab (ou /etc/cron.d )?

Os arquivos nesses dois locais contêm "linhas", cada linha é um trabalho.
Exatamente o mesmo é uma linha que é editada com crontab -e . Cada linha é um trabalho a ser executado pelo cron. A única diferença é que nesses dois locais, a linha de trabalho contém um campo adicional para "usuário". Mas:

crontab -u user1 -e

Também adicionará novas linhas (jobs) (se o usuário que executa o comando tiver os privilégios certos) que serão executados como "user1". A única diferença (prática) é que um usuário pode editar esses trabalhos, mas não os que estão dentro de /etc/crontab ou /etc/cron.d/ . Essa parece ser uma boa ideia para o IMO evitar que os usuários editem trabalhos de outros usuários.

Em resumo: para adicionar trabalhos: use crontab -e .

    
por 30.10.2018 / 06:06

Tags