crontab이 호출하는 셸에서 호출하는 프로그램을 실행하면 코드 127이 반환됩니다.

crontab이 호출하는 셸에서 호출하는 프로그램을 실행하면 코드 127이 반환됩니다.

다음과 같은 (간단한) 문제가 있습니다. 스크립트가 10분마다 실행되기를 원합니다. 스크립트는 실행 파일을 호출합니다. 저는 AIX 5.3 시스템에서 crontab과 ksh를 사용하고 있습니다.

스크립트는 상대 경로를 사용하지만 실행 경로를 절대 경로로 변경해도 아무런 차이가 없습니다. 그래서 여러 번의 시도 끝에이 답변, 나는 다음과 같은 crontab 항목을 생각해냈습니다(*/10은 작동하지 않습니다)

rs14:/home/viloin# crontab -l
0,10,20,30,40,50 * * * * cd /home/viloin/cardme/bin && /bin/ksh myScript.ksh

스크립트는 다음과 같습니다.

#!/bin/ksh

Main(){
  printf "executed in : %s\n" $(pwd);
  executableFile 2>/dev/null 1>&2;
  exeResult=$?; # expected return value : 90
  printf "%s\n" $exeResult;
}

Main;

다음은 명령을 수동으로 실행할 때의 출력입니다.

rs14:/home/viloin/cardme/bin# cd /home/viloin/cardme/bin && /bin/ksh myScript.ksh
executed in : /home/viloin/cardme/bin
90

마지막으로 crontab을 실행할 때의 출력은 다음과 같습니다(이메일에서).

 Subject: Output from cron job cd /home/viloin/cardme/bin && /bin/ksh myScript.ksh, [email protected], exit status 0

Cron Environment:
 SHELL = /usr/bin/sh
 PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:/usr/java14/jre/bin:/usr/java14/bin
 CRONDIR=/var/spool/cron/crontabs
 ATDIR=/var/spool/cron/atjobs
 LOGNAME=viloin
 HOME=/home/viloin

Your "cron" job executed on rs14.saprr.local on Wed Aug 24 11:50:00 CEST 2016
cd /home/viloin/cardme/bin && /bin/ksh myScript.ksh


produced the following output:

executed in : /home/viloin/cardme/bin
127


*************************************************
Cron: The previous message is the standard output
      and standard error of one of your cron commands.

내 파일 myScript.ksh에는 다음과 같은 모든 권한이 있습니다.

rs14:/home/viloin/cardme/bin# ll -al myScript.ksh
-rwxrwxrwx    1 viloin   cardme          174 Aug 24 10:54 myScript.ksh

내 실행 파일이 실제로 코드 127로 종료되지 않았는지 확인하기 위해 echo 바이너리를 사용하고 이름을 바꾸었으며 동일한 동작을 수행합니다(명령을 수동으로 실행할 때 90 대신 0을 반환하는 경우 제외).

수동으로 명령을 입력하는 것과 crontab에 명령을 요청하는 것 사이에 이러한 차이가 발생하는 이유는 무엇입니까?

답변1

실행 파일에 대한 전체 또는 상대 경로를 제공하도록 셸 스크립트를 변경합니다.

./executableFile ...

대화형 사용에서는 .cardme/bin디렉터리가 PATH에 있어야 합니다. cron 환경에서는 그렇지 않습니다.

관련 정보