Scripting

執行由 crontab 呼叫的 shell 呼叫的程序返回程式碼 127

  • August 24, 2016

我遇到了以下(簡單)問題:我希望每 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 的環境中是不正確的。

引用自:https://unix.stackexchange.com/questions/305429