次のような(簡単な)問題があります。スクリプトを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環境ではそうではありません。