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を実行したときの出力は次のようになります(Eメールから)。

 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環境ではそうではありません。

関連情報