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.
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
.