Não é possível fazer o cron.hourly funcionar

6

Eu instalei o cron com o sudo apt-get install cron, iniciei como root e confirmei que ele está rodando com

ps -ef

Eu criei um script simples com o seguinte conteúdo:

touch /home/username/cron-test.txt

Eu fiz este arquivo de script executável e coloquei em

mv cron-test.sh /etc/cron.hourly

Por algum motivo, ele não é executado e o arquivo não está sendo criado. Eu tentei executá-lo manualmente e funciona.

Eu também tentei outros scripts cron e eles não parecem funcionar. Senti falta de algo ou estou usando o cron incorretamente?

Meu sistema é o Ubuntu 10.10 e meu hoster o removeu, então ele veio com apenas alguns processos instalados (nem mesmo o cron).

    
por Frank Vilea 29.09.2011 / 13:49

2 respostas

10

Tente adicionar #! /bin/sh como a primeira linha do seu script e remover a extensão, para que o nome seja /etc/cron.hourly/cron-test

Lembro-me de ler em algum lugar que o cron não executará arquivos com uma extensão, porque ele usa runparts quando /ect/crontab tem o seguinte conteúdo:

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the 'crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

O acima é o conteúdo do meu /etc/crontab no Ubuntu 10.04, com o cron instalado (eu não editei este arquivo)

Como o arquivo /etc/crontab usa run-parts , o nome do arquivo é muito restritivo (Obrigado Matteo):

run-parts runs a number of scripts or programs found in a single directory 
directory. Filenames should consist entirely of upper and lower case letters,
digits, underscores, and hyphens. Subdirectories of directory and files with
other names will be silently ignored. Scripts must follow the
#!/bin/interpretername convention in order to be executed. They will not
automatically be executed by /bin/sh. The files found will be run in the
lexical sort order of the filenames.
    
por 29.09.2011 / 15:01
3

Aqui está uma citação da página man run-parts:

Filenames should consist entirely of upper and lower case letters, digits, underscores, and hyphens.

A coisa é, você incluiu um '.' no seu nome de arquivo (logo antes do 'txt'). Esse período não corresponde ao padrão de nome de arquivo usado pelas partes de execução para localizar scripts.

Lembre-se de que as extensões de arquivo NÃO fazem parte do sistema de arquivos! Todas as extensões de arquivo que você usa são simplesmente parte do nome do arquivo e, portanto, quando as regras dizem "nome do arquivo", isso inclui o período e as extensões.

Além disso,

Scripts must follow the #!/bin/interpretername convention in order to be executed.

O que significa que você DEVE colocar o #! / bin / bash para que seu script seja executado.

    
por 29.09.2011 / 15:41

Tags