Cron이 bash 스크립트를 실행하지 못함


1

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

명령 줄에서 호출되면 작동하지만 cron이 호출하면 실패합니다. 특히 telnet 명령이있는 행은 0 바이트의 출력을 제공합니다. Telnet에는 755 마스크가 있으므로 모든 사용자가 사용할 수 있어야합니다. 어떤 아이디어?


당신은 이것이 임베디드 시스템이라고 말합니다 ... 당신 /path/to/bash /path/to/script/path/to/script나를 유머 하기보다는 cron에 추가 할 수 있습니까? 또한 telnet과 같은 내장되지 않은 실행 파일에 대한 전체 경로를 추가 하시겠습니까?
PriceChild

#!/bin/sh/ bin / sh가 bash와 심볼릭 링크되어 있더라도 스크립트를 사용하여 스크립트를 실행하면 실제로는 bash 스크립트가 아닙니다. "sh"로 호출하면 배시는 다르게 동작합니다.
glenn jackman

답변:


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

우선 사용 말을 nc하지 telnet반면, 텔넷 시도 대화 형 라인 협상 (TELOPTS)과 사물의 모든 종류의 - nc단지 원시, 깨끗하고 연결을 만듭니다.

둘째, time_conv.awk는 어디에 있습니까? 해당 파일의 전체 경로를 지정해야합니까?


nc는 임베디드 시스템에서 사용되므로 사용할 수 없습니다. time_conv.awk는 / usr / bin에 있습니다. 나는이 스크립트의 모든 호출에 절대 경로를 두려고 노력했지만 아무 소용이 없습니다.
Damir

2

cron에서는 더 이상 tty 세션이 없으며 대화 형이 아닙니다. 나는 텔넷이 이것을 좋아하지 않는다고 생각한다. 연결하려면 다른 프로그램이 필요합니다. tcp 연결을 수행하고 내용을 덤프하는 간단한 프로그램은 포함 된 작업의 경우에도 매우 작은 프로그램이어야합니다.

당신은 임베디드 실행중인 경우 및 경우에 당신이 떠들썩한 파티를, 어쩌면 배쉬 버전은 지원 /dev/tcp/host/port의사 장치를. 열린 파일이 아닌 리디렉션에 사용해야합니다. IE cat < /dev/tcp/host/port가 작동 cat /dev/tcp/host/port하고 오류가 발생합니다.

DAYTIME = $ (고양이 </ dev / tcp / $ ADDR / $ DTPORT | time_conv.awk)


텔넷이 대화식 쉘 부족에 대해 불평하는 것은 사실이지만 / dev / tcp는 없습니다. 다른 방법이 있습니까?
Damir

@Damir, 당신은 'ls / dev / tcp'를 할 수 없다는 것을 기억하십시오, 그것은 bash에만 있습니다. 'cat </ dev / tcp / somehost / chargen'을 수행 할 수 있습니까? 그렇지 않은 경우 netcat과 같은 것이 필요하거나 직접 컴파일하십시오.
Rich Homolka
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.