Por que os crontabs não são armazenados nos diretórios pessoais do usuário?

35

Estou curioso para saber: por que os crontabs são armazenados em / var e não nos diretórios pessoais do usuário? É uma pena total isolar esses arquivos para atualizações, mas suspeito que haja um motivo lógico ...

Martin Eve
fonte

Respostas:

41

Algumas razões pelas quais posso pensar:

  • Em ambientes corporativos, você pode ter milhares de usuários. Nesse caso, o cron teria que varrer o diretório de todos os usuários a cada minuto para verificar o arquivo crontab (se ele foi criado, excluído ou modificado).
    Ao mantê-los em um único local, não é necessário fazer essa verificação intensiva.
  • Os diretórios pessoais podem nem sempre estar disponíveis. Se os diretórios pessoais forem montados automaticamente, eles podem não estar montados. Fazer com que o cron os verifique a cada minuto faria com que fossem montados e impediria a desmontagem devido à inatividade. Além disso, se o diretório pessoal estiver criptografado e descriptografado com a senha do usuário, o cron não poderá acessar o diretório pessoal, a menos que o usuário tenha efetuado login e descriptografado / montado.
  • Os diretórios pessoais podem ser compartilhados entre hosts. Se o diretório inicial for um compartilhamento de rede, esse mesmo diretório inicial aparecerá em vários hosts. Mas você pode não querer que seus trabalhos cron sejam executados em todos os hosts, apenas um deles.
Patrick
fonte
11
+1 Embora tradicionalmente cronnão redigitalize esses arquivos a cada minuto; carregou-os uma vez e apenas os releu em um sinal.
Goldilocks
7
Mas você está certo sobre o ponto # 3; de acordo com a wikipedia, os crontabs estavam originalmente em $ HOME, até que "[Bell lab devs] incorporou o Unix at command no cron, moveu os arquivos crontab para fora dos diretórios pessoais dos usuários (que não eram específicos do host) e para um host comum específico do host diretório de spool ... "Foi também quando o crontabcomando foi criado, o que pode ter resolvido o problema de recarregamento.
precisa
2
@Patrick Ou quando um programa usa a utimeschamada do sistema, com o caminho do diretório de spool como argumento, para definir o mtime do diretório, que é o que o crontabcomando do Vixie cron faz.
Mark Plotnick
2
As primeiras versões do cron certamente não capturavam alterações nos arquivos crontab do usuário, a menos que fossem editados via crontab -e. I foram capturados por isso no passado no Solaris ver este décadas página homem manpages.info/sunos/cron.1.html
2
No Solaris 10, crontab -eque é o setuid root, grava uma mensagem /etc/cron.d/FIFOdepois que um usuário edita um crontab.
Mark Plotnick