Crontab에서 Expect 스크립트의 출력을 가져올 수 없습니다.

Crontab에서 Expect 스크립트의 출력을 가져올 수 없습니다.

다른 서버에서 원시 파일을 가져오기 위해 Expect 스크립트(.exp)를 만들었습니다. 그런 다음 .exp를 호출할 수 있는 .sh 파일도 있습니다. 일반적인 방법(./call_expect.sh)으로 실행하려고 하면 제대로 작동합니다. 그러나 CRONTAB에서 예약하면 원시 데이터를 가져오지 않고 예상 스크립트가 응답하지 않습니다. 지금은 혼란스럽습니다. 헤더가 충돌해서 문제가 있는 것인지, 아니면 crontab에 문제가 있는 것인지 알 수 없습니다.

예상 예(directory.exp)

#!/usr/local/bin/expect

package require Expect
# set Variables
set USER {USER1234}
set PASSWORD {PASSWORD12345}
set NODE {test_server}
set DIR {/Daily/TESTING}
set PROMPT {$}
set COMMAND0 {ls -lrt Daily/TESTING | grep dr | grep -v tar | awk {'print $9'} | sort | grep ^2}
set quit_COMMAND {exit}


spawn ssh $USER@$NODE
expect {
  "assword:"
}
send "$PASSWORD\r"

expect {
  "$PROMPT "
}
send "$COMMAND0\r"

expect {
  "$PROMPT "
}
send "exit\r"

예.SH(call_expect.sh)

#!/bin/ksh

{locations . . . }

${BIN}/directory.exp | dos2unix | grep ^2 > ${CONFIG}/.list_dir.tmp

previous_directory=`cat ${CONFIG}/.list_dir.tmp | tail -2 | head -1`
latest_directory=`cat ${CONFIG}/.list_dir.tmp | tail -1  | head -1`

echo "`date` Previous Dir: ${previous_directory}   Latest Dir: ${latest_directory}"

저는 솔라리스 5.10을 사용하고 있습니다.

답변1

awk 명령에서 오류가 발생한 것 같습니다. 작은 따옴표가 awk를 혼동하는 것 같습니다(Mac에서 테스트 중이므로 awk가 다르게 동작할 수 있습니다).

$ seq 10 | awk "'print \$9'"
awk: cmd. line:1: 'print $9'
awk: cmd. line:1: ^ invalid char ''' in expression

awk에는 액션 본문에 중괄호가 필요합니다.

이 시도:

set COMMAND0 {ls ... | awk {{print $9}} | ...}

외부 중괄호는 Tcl(및 예상) 따옴표용이고 내부 중괄호는 awk용입니다.

관련 정보