Qual é a maneira correta de editar um arquivo crontab?

52

Estou tentando automatizar a atualização do awstats para o meu servidor web e entendo que preciso usar o cron para configurá-lo. Então, cada usuário tem um arquivo crontab?

Eu estava seguindo as instruções aqui community / AWStats

E diz para ir para o arquivo em: /etc/crontab

Esse arquivo já possui algumas informações. Esse é o crontabarquivo principal ou algo assim? Eu vi algumas instruções online para usar o arquivo que aparece crontab -e.

Qual é o arquivo adequado para usar e a melhor maneira de fazer isso?

Se eu agendar uma tarefa como meu usuário não root, ela será executada sozinha no intervalo de tempo especificado, sem problemas?

Preciso reiniciar o servidor depois de salvar o trabalho cron no crontabarquivo antes que ele comece a funcionar?

timbram
fonte

Respostas:

50

Qual é o arquivo adequado para usar e a melhor maneira de fazer isso?

crontab -e é a melhor maneira de fazer isso - isso permitirá que você edite facilmente as crontabs por usuário.

Se eu agendar uma tarefa como meu usuário não root, ela será executada sozinha no intervalo de tempo especificado, sem problemas?

Sim, e será executado com os privilégios dessa conta de usuário.

Como princípio, é melhor executar tarefas agendadas com os privilégios mais baixos possíveis, portanto, se o que você estiver fazendo não exigir root, não use root. Se você nem precisa acessar os arquivos e pastas da sua conta, poderá criar um novo usuário e usar essa conta apenas para essa tarefa. Por outro lado, se sua tarefa não exigem raiz, crontab uso da raiz ( su/ sudo sua raiz, em seguida, usar crontab -e).

Preciso reiniciar o servidor depois de salvar o trabalho cron no arquivo crontab antes que ele comece a funcionar?

Não, ele começará a funcionar imediatamente (bem, a próxima hora programada possível).

Por que não editar o arquivo diretamente? Onde ele está localizado?

Os arquivos crontab do usuário estão localizados /var/spool/cron/crontabs, mas suas permissões são definidas de tal maneira que eles não podem ser acessados ​​sem a permissão do superusuário (mas, uma vez aberto e o processo cron eliminado os privilégios, ele ainda pode acessar o arquivo).

O sistema não foi projetado para os usuários finais editarem esses arquivos diretamente e, de fato, a parte superior do arquivo possui um DO NOT EDIT THIS FILEaviso severo na parte superior para esse efeito. Em vez disso, o arquivo foi projetado para ser editado por meio da crontab -equal configura um espelho temporário do arquivo /tmppara edição - sem o aviso severo - após o qual verifica e instala o próprio arquivo permanente crontab. Tudo isso pode ser feito sem a permissão do superusuário.

Se você editou o arquivo crontab diretamente, não sei qual seria o resultado. É possível que simplesmente não tenha efeito até a próxima reinicialização e pode ser difícil depurar qualquer erro.

thomasrutter
fonte
5
crontab -epermite editar seu usuário crontab sem o sudo. Os crontabs do usuário estão em /var/spool/cron/crontabsum diretório que não pode ser acessado sem a permissão do superusuário (mas de maneira que uma vez que o cron elimine privilégios, ele ainda poderá lê-lo). Mesmo se você usar o sudo para tentar editar o arquivo diretamente, você verá um grande aviso na parte superior, "NÃO EDITAR ESTE ARQUIVO" - o arquivo foi projetado para ser editado usando o crontabcomando que usa uma cópia temporária /tmpe depois instala depois de salvar.
thomasrutter
25

Todo usuário tem seu próprio crontab.

Para vê-lo, basta digitar

crontab -l

e, sim, você viu direito, quando quiser adicionar um crontabe simplesmente

crontab -e

pela primeira vez, você será perguntado sobre o editor para usar crontab. Como você é um novato, como eu disse, recomendo usar o nano, é o editor mais simples de usar.

O crontab em si funciona assim

MIN =  Minute 0-60
HOUR = Hour [24-hour clock] 0-23
MDAY = Day of Month 1-31
MON = Month 1-12 OR jan,feb,mar,apr ...
DOW =  Day of Week 0-6 OR sun,mon,tue,wed,thu,fri,sat
COMMAND = Command to be run Any valid command-line

Por exemplo, para acionar um trabalho a cada 15 minutos apenas na segunda-feira, faça-o assim

*/15 * * * mon /home/me/yourscript.sh

e SIM, é muito importante que você coloque seu cronjob no crontab do usuário que possui direitos suficientes para executá-lo.

Portanto, se seu script precisar ser root ou um usuário especial, certifique-se de su para esse usuário e adicione o cronjob lá.

Também é muito importante!

cronjob é burro! Sim, eu disse isso. Sempre certifique-se de inserir o PATH completo para o que application/command/scriptvocê está usando, porque o crontab não funcionará .bashrcou similar. Você sempre precisa informar ao cron onde ele pode encontrar os arquivos e diretórios.

Para responder ao restante de suas perguntas:

É claro que funcionará por conta própria, é para isso que serve. Mas você precisa verificar se o cronjob realmente faz isso ou se está faltando alguma coisa. Por exemplo, faça login em um arquivo de log para ver se ele realmente funciona.

E NÃO, não é necessário reiniciar. Normalmente, uma reinicialização com linux é necessária apenas se você instalar um novo kernel. Para usar, você precisará reiniciar. Quase tudo o mais pode ser feito sem a reinicialização no Linux. Claro que existem exceções, mas em geral essa afirmação está correta.

s1mmel
fonte
para verificar o formato da hora, consulte este site crontab.guru
Astm