Pipes no script bash funcionando enquanto o mesmo script falha no crontab

0

Eu encontrei um comportamento estranho (para mim). Eu escrevi um script maior que está funcionando bem. Quando tento iniciar o script a partir de um trabalho definido pelo crontab, as seguintes linhas estão causando problemas:

down_ubuntu14=https://cloud-images.ubuntu.com/trusty/current/
ubuntu14=trusty-server-cloudimg-amd64-disk1.img
Ubuntu14_Date_Web=$(wget -qO- $down_ubuntu14 | grep $ubuntu14 | awk '{print $8 $9}' | sed -e "s/<.*>/ /g" | cut -d">" -f2 | awk '{print $2}')

Na última linha, desnho o site de download para obter a data do destino de download específico.

soi       5076  5075  0 09:35 ?        00:00:00 wget -qO- https://cloud-images.ubuntu.com/trusty/current/
soi       5077  5075  0 09:35 ?        00:00:00 grep trusty-server-cloudimg-amd64-disk1.img
soi       5078  5075  0 09:35 ?        00:00:00 awk {print $8 $9}
soi       5079  5075  0 09:35 ?        00:00:00 sed -e s/<.*>/ /g
soi       5080  5075  0 09:35 ?        00:00:00 cut -d> -f2
soi       5081  5075  0 09:35 ?        00:00:00 awk {print $2}

Parece que os pipes estão causando um avanço de linha ou iniciam cada parte da string em um único processo.

Muito obrigado pelas suas respostas e recomendações: Eu tento fazer um exemplo mais preciso.

Se eu configurar um script curto como este:

down_ubuntu14=https://cloud-images.ubuntu.com/trusty/current/
ubuntu14=trusty-server-cloudimg-amd64-disk1.img
Ubuntu14_Date_Web=$(wget -qO- $down_ubuntu14 | grep $ubuntu14 | awk '{print $8 $9}' | sed -e "s/<.*>/ /g" | cut -d">" -f2 | awk '{print $2}')
echo $Ubuntu14_Date_Web | tee /tmp/test
echo "Just another test line"  | tee -a /tmp/test

e iniciá-lo a partir do console do ssh Eu vejo o seguinte no arquivo de teste:

cat /tmp/test
14-Jun-2018
Just another test line

No crontab eu entro na seguinte linha:

20 6 * * *      /home/soi/scripts/test.sh

Agora o script está sendo iniciado pelo cron e o seguinte eu posso ver na lista de processos:

soi       6508  6507  0 06:20 ?        00:00:00 /bin/sh -c /home/soi/scripts/test.sh
soi       6509  6508  0 06:20 ?        00:00:00 wget -qO- https://cloud-images.ubuntu.com/trusty/current/
soi       6510  6508  0 06:20 ?        00:00:00 grep trusty-server-cloudimg-amd64-disk1.img
soi       6511  6508  0 06:20 ?        00:00:00 awk {print $8 $9}
soi       6512  6508  0 06:20 ?        00:00:00 sed -e s/<.*>/ /g
soi       6513  6508  0 06:20 ?        00:00:00 cut -d> -f2
soi       6514  6508  0 06:20 ?        00:00:00 awk {print $2}

... e apenas um espaço é gravado no arquivo de log / tmp / test apenas o seguinte é gravado no log:

cat /tmp/test
Just another test line

Eu não entendo a causa principal desse problema. Espero que alguém possa trazer alguma luz aqui.

    
por Franky 14.06.2018 / 16:48

2 respostas

2

A maioria das implementações do cron não inicia um shell com o processo, mas um shell para analisar o pipe e executar os dois processos separadamente. Se você adicionar comandos ao script.sh e chamá-lo do cron, ele funcionará.

    
por 14.06.2018 / 16:55
0

pelo menos parece ser algo específico na instalação do Linux. Eu tentei o script em cinco caixas diferentes e sabores do Linux e em todos os lugares que funciona bem. Então decidimos reinstalar a caixa.

Muito obrigado por todo seu apoio e idéias. Muito apreciado.

Cheeers, Franky

    
por 15.06.2018 / 17:20