Como você usa o comando run-parts?

6

Por alguma razão, meu crontab não está executando os scripts por hora / semanais / etc. Parece que as partes de execução não estão funcionando e eu não consigo fazer isso funcionar na minha máquina local também. Existe um erro na maneira como estou usando?

fabe@fabetop ~ $ cat /home/fabe/tmp/test.sh 
#!/bin/sh
touch /home/fabe/tmp/test_it
fabe@fabetop ~ $ ls -la /home/fabe/tmp
total 32
drwx------  2 fabe fabe  4096 Feb 20 15:00 .
drwx------ 60 fabe fabe 16384 Feb 20 15:00 ..
-rwxr-xr-x  1 fabe fabe    39 Feb 20 15:00 test.sh
fabe@fabetop ~ $ run-parts --report /home/fabe/tmp
fabe@fabetop ~ $ ls -la /home/fabe/tmp
total 32
drwx------  2 fabe fabe  4096 Feb 20 15:00 .
drwx------ 60 fabe fabe 16384 Feb 20 15:00 ..
-rwxr-xr-x  1 fabe fabe    39 Feb 20 15:00 test.sh
    
por Fabian Barkhau 20.02.2014 / 15:09

2 respostas

12

O problema é o nome do seu script. De man run-parts :

If neither the --lsbsysinit option nor the --regex option is given then the names must consist entirely of ASCII upper- and lower-case letters, ASCII digits, ASCII underscores, and ASCII minus- hyphens.

Em outras palavras, sem extensão. Curiosamente, mesmo com a opção --lsbsysinit , você não pode especificar um arquivo como foo.sh , já que não corresponde a nenhum dos namespaces cobertos:

If the --lsbsysinit option is given, then the names must not end in .dpkg-old or .dpkg-dist or .dpkg-new or .dpkg-tmp, and must belong to one or more of the following namespaces: the LANANA assigned namespace (^[a-z0-9]+$); the LSB hierarchical and reserved namespaces (^_?([a-z0-9_.]+-)+[a-z0-9]+$); and the Debian cron script namespace (^[a-zA-Z0-9_-]+$).

Assim, enquanto foo.sh falhar, foo.s-h ou foo.-sh funcionará. Eu não tenho ideia de por que eles fizeram isso dessa maneira, mas presumivelmente eles estão seguindo algum padrão ou outro.

De qualquer forma, você tem 2 opções, seja renomear seus scripts para não ter uma extensão (extensões são opcionais no * nix) ou você pode pular run-parts ao mesmo tempo. Use isso no seu crontab :

find /home/fabe/tmp/ -prune -type f -executable -exec {} \;

O comando acima encontrará todos os arquivos executáveis no diretório de destino e os executará. Eu acho que -executable é uma extensão GNU, mas você marcou isso como Linux, então eu suponho que você tenha o GNU encontrado.

    
por 20.02.2014 / 17:47
2

Todos os scripts colocados na pasta /etc/cron.hourly seriam executados de hora em hora.

No entanto, seus arquivos precisam ser:

  • executável,
  • corresponde ao namespace do script cron do Debian (^[a-zA-Z0-9_-]+$) .

Por exemplo, se você tiver um script com extensão ( .sh neste caso), não funcionará.

Para imprimir os nomes dos scripts que seriam executados, tente:

sudo run-parts --report --test /etc/cron.hourly
    
por 11.04.2015 / 14:39

Tags