Cron falha ao executar o script bash

1

Eu tenho script bash

#!/bin/sh

DTFILE=/etc/daytime.addr
DTPORT=13
DAYTIME_ERROR=/tmp/dtm.err

function daytime_error(){
    if [[ -z $1 ]]
    then 
    exit 1
    fi
    if [[ -e $DAYTIME_ERROR ]]
    then
    echo "Error already reported"
    else
    logger "$1"
    touch $DAYTIME_ERROR
    fi
    exit 1
}

if [[ -s $DTFILE ]]
then
    ADDR=$(head -n1 $DTFILE)
    DAYTIME=$(telnet $ADDR $DTPORT | time_conv.awk)
    if [[ -z $DAYTIME ]]
    then
    daytime_error "Daytime client: no connection to $ADDR"
    else
    date -s "$DAYTIME"
    hwclock -w
    rm $DAYTIME_ERROR
    fi

else
    daytime_error "Daytime client: no daytime server address in file $DTFILE"
fi

e funciona quando chamado da linha de comando, mas falha quando o cron o chama. Especificamente, a linha com o comando telnet fornece zero bytes de saída. O Telnet tem 755 máscaras, portanto, todo usuário deve poder usá-lo. Alguma idéia?

    
por Damir 21.04.2011 / 11:41

2 respostas

2

DAYTIME=$(telnet $ADDR $DTPORT | time_conv.awk)

Primeiro eu diria usar nc não telnet - telnet tenta todos os tipos de negociação de linha interativa (TELOPTS) e coisas, enquanto nc apenas cria uma conexão bruta, limpa.

Em segundo lugar, onde é o time_conv.awk? Talvez você deva especificar um caminho completo para esse arquivo?

    
por 21.04.2011 / 12:00
2

No cron, você não tem mais uma sessão tty, ela não é interativa. Eu acho que o telnet não gosta disso. Você precisará de algum outro programa para obter a conexão. Um programa simples para fazer um tcp conectar e descarregar seu conteúdo deve ser um programa muito pequeno, mesmo para trabalhos embarcados.

Se você estiver executando o embedded, e se tiver o bash, talvez a sua versão do bash suporte o dispositivo /dev/tcp/host/port pseudo. Isso precisa ser usado no redirecionamento, não em um arquivo aberto. I.E. cat < /dev/tcp/host/port funcionará, cat /dev/tcp/host/port dará um erro.

DAYTIME = $ (cat < / dev / tcp / $ ADDR / $ DTPORT | time_conv.awk)

    
por 21.04.2011 / 17:01