Editar crontab programaticamente e forçar o daemon para refrescar
Pergunta
Eu estou tentando escrever uma interface web para Crontab em Ruby usando a excelente gem CronEdit. Eu fui através de código fonte crontab de Dillon Cron e descobriu que ele atualiza um arquivo específico para que o daemon irá atualizar a lista de cron durante a próxima varredura.
No homem crontab para VixieCron, ele diz:
Além disso, as verificações agendadas a cada minuto para ver se modtime de seu diretório de spool (Ou o modtime em / etc / crontab) foi alterado, e se tiver, cron irá então examinar a modtime em todos os crontabs e recarregar as que mudaram. Assim necessidade cron não ser reiniciado sempre que um arquivo crontab é modificado. Observe que o crontab (1) comando atualiza o modtime do diretório de spool sempre que muda um crontab.
Existe alguma plataforma (Ubuntu, Red Hat, ArchLinux, Mac OS X) forma independente para garantir que depois de editar manualmente o arquivo Cron, as atualizações daemon-lo sem falhar?
Solução 3
Muito obrigado gnibbler e Aaron. Eu só fui através do código-fonte para ambas as gemas 'sempre' e 'cronedit' para Ruby. Ambos faz um 'crontab -' que substitui o arquivo cron existente com as entradas cron atualizados. Isso significa contrárias à minha pergunta original, essas bibliotecas fazer uso da ferramenta crontab padrão que por sua vez faria o que especificidades necessárias para atualizar o daemon.
Eu acho que o melhor independente de plataforma, e cron (Dillon, vixie, mcron etc.) forma agnóstica para atualizar o daemon é sempre usar o utilitário crontab associado. Mesmo quando a edição de programação, o programa do usuário deve passar o novo arquivo cron para o utilitário crontab que faria tudo o que é exigido por essa plataforma específica / cron.
@ Marcos, obrigado pelos comentários. No entanto, eu estou tentando fornecer uma web interface simples que o usuário pode personalizar através do www assim como editar o arquivo crontab diretamente.
Muito obrigado por suas respostas!
Outras dicas
Não, não há. Se você sabe que é VixieCron, em seguida, atualizar o timestamp do diretório. Caso contrário, você pode ser capaz de fingir:. Set a variável env EDITOR
Antes de chamar crontab -e
(que deve trazer um editor para o crontab)
A idéia é definir o editor para algum programa que faz a mudança. crontab -e
irá aguardar o editor de encerrar e reler o arquivo e dizer cron que algo mudou.
Se você tem uma versão antiga do cron, no entanto, você ainda deve reiniciá-lo. Mas duvido que você pode encontrar essas versões antigas sobre qualquer coisa que roda Linux ou Mac OS X.
Sane modernas distribuições Linux tem diretório /etc/cron.d/
onde você pode colocar a sua entrada crontab como um arquivo separado. Se bem me lembro o novo cronfile é lido dentro de 2 minutos de ser escrita ??p>
Se isto é tão importante, por que não usar uma alavanca diferente? Em outras palavras, existem duas opções:
crontab 1:. / Fazer / algum / muito / específica / coisa com parâmetros específicos que eu preciso mudar etc
crontab 2: / fazer / o que / necessita de / para / ser / feito
No nº 2, o trabalho é responsável por determinar em tempo de execução o que precisa ser feito e fazê-lo. Com este projeto, a noção de que necessitam para entender como funciona o crontab em algum nível detalhado é irrelevante.