Adicionando / removendo trabalhos em arquivos Debian crontab?

1

Eu tenho um script de 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, são acrescentadas linhas de cronjob aos arquivos crontab para root e www-data (em /var/spool/cron/crontabs/ ), usando cat e heredoc text.

Cada cronjob que é adicionado ao arquivo é incluído pelos comentários do marcador, para que ao usar a função de desinstalação do script, esses cronjobs possam ser encontrados e removidos dos arquivos crontab usando sed .

Isto parece estar funcionando bem, embora eu tenha notado que ao revisar cada crontabs via crontab -l as primeiras 3 linhas do crontab não aparecem, embora elas ainda existam ao verificar o arquivo crontab real diretamente. Alguma pesquisa revelou que este é um efeito colateral de uma característica intencional na implementação do crontab do Debian, que esconde as 3 primeiras linhas de um crontab , pois espera que essas linhas sejam um cabeçalho de 3 linhas "NÃO EDITAR ESTE ARQUIVO".

No entanto, se eu estiver anexando a um arquivo crontab anteriormente inexistente, este 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 diretamente para um arquivo crontab em qualquer caso. Como posso atualizar meu script para que ele possa adicionar e remover automaticamente do crontabs de uma maneira que mantenha o sistema feliz?

(vejo na página man que existe um CRONTAB_NOHEADER que pode ser definido como N para não esconder as 3 linhas.)

    
por dave559 31.07.2018 / 15:50

1 resposta

3

Em vez de manipular um crontab individual, eu optaria por remover os snippets 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 diretório /etc/cron* que você precise / queira que o snippet seja executado:

$ ls -ld /etc/cron*
-rw-------. 1 root root    0 May  2 10:54 /etc/cron.allow
drwxr-xr-x. 2 root root 4096 Jul 28 14:56 /etc/cron.d
drw-------. 2 root root 4096 Jul 28 14:56 /etc/cron.daily
-rw-------  1 root root    0 Apr 10 21:48 /etc/cron.deny
drw-------. 2 root root 4096 Jul 28 14:55 /etc/cron.hourly
drw-------. 2 root root 4096 Jun  9  2014 /etc/cron.monthly
-rw-------. 1 root root  451 Jun  9  2014 /etc/crontab
drw-------. 2 root root 4096 Jun  9  2014 /etc/cron.weekly
    
por 31.07.2018 / 15:59

Tags