Obtendo o cron para executar um script

1

Estou tentando fazer com que um script seja executado de acordo com uma entrada crontab. O script que eu tenho funciona bem no terminal, mas não será executado automaticamente de acordo com a entrada do cron. O script é simplesmente criar um arquivo vazio no diretório / testexport1 uma vez por hora.

Eu usei o crontab -e para editar o crontab, que é assim:

30 * * * * /bin/bash/ /testexport1/./createfilescript.sh

O script em si é assim:

[root@centostest testexport1]# cat createfilescript.sh
#!/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/testexport1

today="$( date +"%Y%m%d" )"
number=0

while test -e "$today$suffix.txt"; do
    (( ++number ))
    suffix="$( printf -- '-%02d' "$number" )"
done

fname="$today$suffix.txt"

printf 'Will use "%s" as filename\n' "$fname"
touch "$fname"

Eu adicionei a parte PATH ao topo do script para especificar de onde o script estava sendo executado (como em outro artigo que eu li).

Alguma idéia de por que esta entrada do crontab não parece estar rodando o script? Correção simples, tenho certeza, mas estou andando em círculos no mo.

    
por Ernie 14.03.2018 / 13:04

3 respostas

2

O crontab não está executando o script porque /bin/bash/ provavelmente não foi encontrado. Isso deve ler /bin/bash (observe a falta de / no final) ou qualquer que seja o caminho correto para bash em seu sistema.

Verifique também se todos os utilitários que você está usando no script estão realmente localizados no $PATH que você definiu. É mais comum modificar o caminho do que substituí-lo, já que o caminho do sistema geralmente inclui diretórios onde coisas como touch podem ser encontradas.

    
por 14.03.2018 / 14:12
1
Os binários

date e touch estão em /bin , o que não faz parte do seu $PATH .

    
por 14.03.2018 / 13:12
0

Eu estava indo apenas para adicionar um comentário, mas porque ainda não posso ...

Como você está executando a partir do cron, o cron não sabe sobre a pasta na qual você deseja que o arquivo seja criado, portanto mude para esse diretório no início do script para resolvê-lo:

[root@centostest testexport1]# cat createfilescript.sh
#!/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/testexport1

cd  /testexport1

today="$( date +"%Y%m%d" )"
number=0

while test -e "$today$suffix.txt"; do
    (( ++number ))
    suffix="$( printf -- '-%02d' "$number" )"
done

fname="$today$suffix.txt"

printf 'Will use "%s" as filename\n' "$fname"
touch "$fname"

Outra coisa é a linha do cron:

30      *       *       *       *       /bin/bash/ /testexport1/./createfilescript.sh

se o script estiver em / testexport1 / altere a linha do cron com este

30      *       *       *       *       /bin/bash /testexport1/createfilescript.sh
    
por 14.03.2018 / 13:20