Localização do arquivo crontab

53

como muitos (a maioria?) outros, edito meu crontab via crontab -e, onde mantenho todas as operações de rotina, como backup incremental, ntpdate, várias operações rsync, além de tornar o fundo do meu desktop natalino com tema uma vez por ano. Pelo que entendi, em uma instalação nova ou em um novo usuário, isso também cria automaticamente o arquivo, se ele não existir. No entanto, quero copiar este arquivo para outro usuário. Então, onde está o arquivo real que estou editando?

Se isso varia entre as distros, estou usando Centos5 e Mint 17

Jarmund
fonte
15
+1 apenas para fazer o seu fundo desktop natal temático, uma vez por ano
Celada
5
@ Celada Pode não ser frequente, mas é uma tarefa rotineira.
Jarmund 13/04

Respostas:

54

A localização dos cronarquivos para usuários individuais é /var/spool/cron/crontabs/.
De man crontab:

Cada usuário pode ter seu próprio crontab e, embora estes sejam arquivos /var/spool/cron/crontabs, eles não devem ser editados diretamente.

heemail
fonte
7
As palavras-chave "não pretendem ser editadas diretamente", portanto, esta resposta está incompleta sem o comando de Celada abaixo, que fornece uma resposta mais segura para a parte "copiar para outro usuário" da pergunta. Se as pessoas adquirem o hábito de editar diretamente os crontabs sem enviá-los através do comando crontab, eles dispensam muitas verificações de sanidade que o comando fornece.
perfil completo de Monty Harder
@MontyHarder Concordo "eles não devem ser editados diretamente", mas e se houver necessidade, como se fosse necessário fazer uma entrada no crontab por meio de um script bash? você precisa usar o arquivo exato, acho que nenhuma interface externa ajudará nesse caso, me corrija se estiver errado.
Prabhat Kumar Singh
@PrabhatKumarSingh Você ainda não deve editar diretamente o arquivo. Se você leu o comando do Celada abaixo, viu um exemplo de como um script pode manipular um arquivo crontab sem editá-lo diretamente. man crontabexplica como isso funciona.
Monty Mais difícil
34

O heemayl está correto sobre a localização dos arquivos crontab no Linux, mas pode ser diferente em outros sistemas operacionais e "teoricamente" também pode estar em um local diferente no Linux. Essencialmente, quando uma interface especial é fornecida para acessar os arquivos, você deve usá-la. Isso garantirá que você cronverifique os arquivos antes de instalá-los, verifique se os arquivos têm as permissões necessárias, etc ...

Portanto, você deve copiar um crontab de um usuário para outro usando essa interface, assim, não acessando os arquivos diretamente.

crontab -u <user1> -l | crontab -u <user2>
Celada
fonte
3
Há muitas boas razões pelas quais os arquivos crontab não devem ser manipulados diretamente por algo que não seja o próprio sistema operacional. Esta é uma solução muito melhor. Eu realmente acho que precisa ser incorporado na resposta oficial.
amigos estão dizendo sobre monty
@MontyHarder Não existe realmente uma resposta "oficial". Existe a resposta que a pessoa que solicitou escolheu como pessoalmente útil para ela (aquela com a marca de seleção) e a resposta que a comunidade escolheu (com mais votos). Em suma, você tem 15 representantes, você pode sugerir que esta é a resposta certa ao fazer o voto positivo. Além disso, se você quiser sugerir melhorias para a outra resposta, precisará comentar sobre essa resposta; caso contrário, o autor não será notificado sobre o seu comentário.
derobert
2
O corolário desta resposta é que um deve redirecionar a saída de crontab -lpara um arquivo, mover o arquivo para o outro sistema e canalizá-lo para crontab. Ou talvez até faça diretamente ( crontab -l | ssh $remote_host crontab).
Blacklight Shining
6
"quando uma interface especial é fornecida para acessar os arquivos, você deve usá-la." Imagine que cada aplicativo forneceu uma interface especial para editar arquivos de configuração, em vez de apenas expô-los através do fs. Isso seria um incômodo para acompanhar.
Witiko
11
Como solicitante original, acho que deveria refletir sobre isso: a resposta aceita foi escolhida com base na minha pergunta em seu sentido literal; a localização do arquivo. Minhas intenções para esse arquivo são irrelevantes. Não acho que a edição das informações adicionais mude a resposta, mas pode ser considerada supérflua.
Jarmund