O Crontab nunca funciona enquanto estiver no /etc/cron.d

32

Aqui está o que eu fiz no Debian Jessie:

  • instale o cron via apt-get install cron
  • coloque um backup_crontabarquivo/etc/cron.d/

No entanto, a tarefa nunca está em execução.

Aqui estão algumas saídas:

/# crontab -l
no crontab for root

/# cd /etc/cron.d && ls
backup_crontab

/etc/cron.d# cat backup_crontab
0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

Há algo a fazer para ativar um crontab específico ou ativar o "serviço" do cron em si?

Jivan
fonte
4
E se estiver executando e falhando com um erro que você não consegue ver porque está redirecionando toda a saída para / dev / null? :)
tink
@ link é possível anexar a saída ao final de um arquivo?
Jivan
2
claro que é; 0,15,30,45 * * * * /backup.sh >> / tmp / testing_cron.out 2> & 1
tink
@ Jivan, apenas uma pequena nota: ls /etc/cron.dé equivalente a cd /etc/cron.d && lsem termos de saída. A única diferença é que o diretório de trabalho não será alterado.
Drew Chapin

Respostas:

49

Os arquivos /etc/cron.dtambém precisam listar o usuário em que o trabalho deve ser executado.

ie

0,15,30,45 * * * * root /backup.sh >/dev/null 2>&1

Você também deve garantir que as permissões e o proprietário: grupo estejam definidos corretamente ( -rw-r--r--e sejam de propriedade de root:root)

Stephen Harris
fonte
16
crontab -lrelatórios sobre entradas cron em /var/spool/cron/crontabs/- ou seja, as crontabs por usuário . /etc/cron.darquivos são crontabs do sistema e não são relatados por crontab -l.
Stephen Harris
5
Na verdade eu mencionei que não estava funcionando, mas eu só percebi que é depois de ter add rootno arquivo - basta crontab -lnão mencioná-lo, como você explica por que - obrigado pela sua ajuda
Jivan
9
parece que também o nome do arquivo tem um papel. No meu caso eu tinha adicionado a etc/cron.dum arquivo com um ponto no meio do nome e o trabalho nunca foi executado até que eu renomeou
pic
20
mesmo problema aqui, traços "-" no nome do arquivo, alterando-os para sublinhados "_" resolviam o problema, os trabalhos eram executados imediatamente.
27417 Rob
11
Eu também tive uma pitada ... o que ... por quê ?! Enfim, obrigado @Rob
Nikolay Dimitrov
8

Outra coisa que observei é que o arquivo /etc/cron.dnão pode ter uma extensão. No meu caso particular, eu tinha um link simbólico:

# my-job.crontab
* * * * * root echo "my job is running!" >> /tmp/my-job.log

$: ln -sf /home/me/my-job.crontab /etc/cron.d/
# This did not work -> job would not run

$: ln -sf /home/me/my-job.crontab /etc/cron.d/my-job
# This did work -> job ran fine

A restrição de nome de arquivo está documentada na página de manual da parte da execução: http://manpages.ubuntu.com/manpages/xenial/man8/run-parts.8.html , pode-se passar uma opção --regex para substituir o formato do arquivo.

No entanto, o comportamento padrão do cron ficou sem extensões. Consulte os comentários em: https://bugs.launchpad.net/ubuntu/+source/debianutils/+bug/38022

rodrigo-silveira
fonte
Cara, você salvou meu dia!
Elboletaire
2
Isso está correto no Ubuntu (talvez em todas as distros derivadas do Debian). No Amazon Linux (e talvez em todas as distros derivadas do Redhat), você pode ter um ponto no nome do arquivo. Obrigado Unix.SE.
Law29 14/03
Acabei de verificar um Debian puro, e os pontos também não funcionam lá. Os traços funcionam (ao contrário do que diz um comentário acima).
Law29 14/03
4

Eu acho que você provavelmente está faltando uma linha em branco necessária no final do seu arquivo cron. Eu tive o mesmo problema, mas depois de verificar tudo listado aqui (permissões de usuário, nome do arquivo, versão do cron etc.), percebi que não havia quebra de linha após a última entrada no meu /etc/cron.d/own_crone isso faz com que o arquivo inteiro seja ignorado.

slac1024
fonte
2

Se você é o único usuário deste computador, pode usar apenas crontab -e. Você será solicitado a selecionar um editor na primeira vez em que executar o comando. Então você pode adicionar isso a ele:

0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

Se você mudar para uma conta de usuário normal, precisará usar sudo crontab -epara configurar os scripts nos quais deseja agendar a execução root.

crontab -lexibe apenas o crontab atual, depois de configurar um usando crontab -e. Se você tiver um arquivo cron em /etc/cron.d/, ele não será exibido com crontab -l.

Você também vai precisar para verificar se o script é executável com: chmod +x /backup.sh.

clk
fonte
11
graças - neste caso, o crontab é definido no contexto de um Dockerfilemodo que não pode realmente fazer crontab -e- mas é uma informação útil de qualquer maneira
Jivan
2

Para Cron de distros * bian (como Raspbian), você precisa ativar o -lparâmetro do daemon Cron. É recomendável fazer isso usando o /etc/default/cronarquivo de configuração, habilitando o EXTRA_OPTS.

Touchwood
fonte
Isso foi diminuído, mas é correto em alguns casos, embora não seja explicado. Nas distros baseadas no Debian, a -lopção para o daemon cron autoriza um conjunto estendido de nomes de arquivos no /etc/cron.ddiretório irá corrigir o problema.
Law29 14/03
1

Verifique sua versão de cron.

Parece que se você estiver usando o crond de Dillon, não precisará do usuário em uma /etc/cron.dentrada.

Eu descobri isso depois de quase arrancar meu cabelo restante.

Eu tenho um punhado de entradas que foram descartadas /etc/cron.dpor várias instalações. Depois de alguma investigação, descobri que um deles estava funcionando. Não tinha o usuário. Então tirei o usuário dos outros. E eles começaram a trabalhar.

James Nelson
fonte