Por que recebo saídas diferentes ao executar meu shellscript manualmente a partir do momento em que o executo com o cron? [duplicado]

2

Eu tenho um script de shell bastante simples ( foo.sh ) que se parece com isso:

#!/bin/bash
echo -n "$USER,$(date)," 'binary -flags | sed -e '1,30d'';
exit 0;

Este script deve preparar alguma saída que será então anexada a um arquivo de texto, assim:

foo.sh >> data.csv

Quando executo o código acima em um prompt de root, ele funciona bem. No entanto, quando eu digito exatamente o mesmo comando no meu crontab (root) que se parece com isso:

05 * * * * /root/foo.sh >> /path/to/data.csv

A saída crontab é diferente! Eu não estava esperando isso e não consigo entender o porquê. Veja os exemplos abaixo:

Expected, normal output from running my .sh (example):
Fri Jun 14 16:32:34 CEST 2013,20130614163304,268828672,71682561

The output written to the file by cron:
Fri Jun 14 16:32:34 CEST 2013,

Os direitos na execução binária no .sh são assim:

-rwxr-xr-x  1 root root

Por que o resultado é diferente? Como posso obter a saída correta no meu arquivo CSV?

    
por pzkpfw 14.06.2013 / 17:40

1 resposta

4

Você não pode contar com o mesmo ambiente em um programa executado por cron quando você o executa interativamente. Existem duas diferenças com maior probabilidade de serem importadas neste caso:

  1. O diretório de trabalho atual

  2. O PATH

Como jordanm comentou acima, um ou ambos em combinação estão fazendo com que o script não encontre seu programa binary .

Se você olhar para o e-mail do sistema local (por exemplo, executando mailx ), provavelmente encontrará mensagens reclamando sobre essa falha.

É uma prática padrão ao escrever crontab entradas e scripts destinados a serem executados por cron em caminhos de código rígido para locais conhecidos de programas.

    
por 14.06.2013 / 18:28