Scripting
執行由 crontab 呼叫的 shell 呼叫的程序返回程式碼 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, viloin@rs14.saprr.local, 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 二進製文件,將其重命名並且我具有相同的行為(除了當我手動執行命令時它返回 0 而不是 90)。
是什麼導致了手動輸入命令和要求 crontab 為我執行此操作之間的差異?
更改您的 shell 腳本以提供執行檔的完整或相對路徑:
./executableFile ...
在互動式使用中,您必須在 PATH 中擁有
.
或cardme/bin
目錄:這在 cron 的環境中是不正確的。