Eu tenho um script shell que, quando executado como root, executa várias tarefas para preparar um servidor Debian (9/stretch) para executar um aplicativo da web. Entre as tarefas que o script faz é anexar linhas cronjob aos arquivos crontab para root
e www-data
(em /var/spool/cron/crontabs/
), usando cat
e texto heredoc.
Cada cronjob adicionado ao arquivo é incluído por comentários de marcadores, de modo que, ao usar a função de desinstalação do script, esses cronjobs possam ser encontrados e removidos dos arquivos crontab usando sed
.
Isso parece estar funcionando bem, embora eu tenha notado que ao revisar cada um dos crontabs através crontab -l
das primeiras 3 linhas do crontab não aparecem, embora ainda existam ao verificar o arquivo crontab real diretamente. Algumas pesquisas revelaram que este é um efeito colateral de um recurso intencional na implementação do crontab do Debian, que oculta as 3 primeiras linhas de um crontab , pois espera que essas linhas sejam um cabeçalho de 3 linhas "DO NOT EDIT THIS FILE".
No entanto, se eu estiver anexando a um arquivo crontab anteriormente inexistente, esse cabeçalho não existe e, portanto, não é criado, e é por isso que as primeiras 3 linhas reais do crontab estão ocultas.
Provavelmente, não estou fazendo a coisa certa escrevendo em um arquivo crontab diretamente em qualquer caso. Como posso atualizar meu script para que ele possa adicionar e remover automaticamente dos crontabs de uma maneira que mantenha o sistema feliz?
(Eu vejo na página do manual que existe um CRONTAB_NOHEADER
que pode ser definido como N para não ocultar as 3 linhas.)
Em vez de manipular um crontab individual, eu optaria por soltar trechos da funcionalidade do crontab em
/etc/cron*
diretórios baseados.Isso parece mais fácil de gerenciar no sentido de que tudo o que é necessário é a criação/exclusão de arquivos de qualquer
/etc/cron*
diretório que você precise/deseja que o trecho seja executado: