我遇到了以下(简单)问题:我希望每 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 环境中则不然。