执行由 crontab 调用的 shell 调用的程序返回代码 127

执行由 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, [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 二进制文件,将其重命名,并且我具有相同的行为(除了当我手动运行命令时它返回 0 而不是 90)。

是什么导致手动键入命令和要求 crontab 为我执行此操作之间存在这种差异?

答案1

更改 shell 脚本以提供可执行文件的完整或相对路径:

./executableFile ...

在交互式使用中,您的 PATH 中必须有.cardme/bin目录:但在 cron 环境中则不然。

相关内容