如果我以root身份运行/home/<user>/<dir>/script.sh
的脚本,那么cron的运行效果会非常好。 但是,如果我从/root/<dir>/script.sh
root/< /root/<dir>/script.sh
(再次以root身份)运行脚本,cron似乎不起作用。
在使用'cron'时,遇到各种默认的$ PATH,我总是拼写每个可执行文件和每个目标文件的绝对$ PATH。 我总是假设'cron'没有设置$ PATH,没有当前的工作目录。
换句话说,不要使用类似的命令
"myprocess abc*.txt"
但是完全可以这样做
"/usr/localbin/myprocess /home/jvs/abc*.txt".
或者,创建一个完成这个工作的bash脚本,然后用一个完整的绝对路径来调用这个bash脚本,例如
"/usr/local/bin/myprocess_abc_txts".
如果您需要在脚本中有一定的灵活性,请使用在您使用'cron'调用的bash脚本中专门设置的环境变量。
我想你需要添加更多的信息。 我猜这是一个权限的事情。 在你的crontab中添加文件,目录和行的权限,这样我们可以提供帮助。 另外,如果你把它放在/ root中,你是否在root的crontab中运行这个?
记住这个环境 – 特别是用cron
而不是root来运行。 当cron运行一些东西的时候,你可能没有太多的环境设置,就像你通过at
运行一个命令一样。 目前还不清楚你目前的目录。 因此,对于由cron
运行的命令,使用一个脚本(就像你已经做的那样),并且确保它设置了足够的运行环境。 并确保您的环境设置代码不是互动的!
在我的机器上,我有一个机制,使cron条目读取(例如):
23 1 * * 1-5 /usr/bin/ksh /work1/jleffler/bin/Cron/weekday
Cron
目录中的weekday
脚本是指向标准脚本的链接,它首先设置环境,然后运行命令/work1/jleffler/bin/weekday
(在这种情况下,它使用命令的名称来确定运行的内容) 。
Cron
目录中的实际脚本是:
: "$Id: runcron.sh,v 2.1 2001/02/27 00:53:22 jleffler Exp $" # # Commands to be performed by Cron (no debugging options) # Set environment -- not done by cron (usually switches HOME) . $HOME/.cronfile base=`basename $0` cmd=${REAL_HOME:-/real/home}/bin/$base if [ ! -x $cmd ] then cmd=${HOME}/bin/$base fi exec $cmd ${@:+"$@"}
我一直在使用它 – 自2001年以来的这个版本 – 它对我来说是一种享受。 我正在使用cron
的基本(Sun Solaris 10)实现; 在其他平台上的新版本的cron
可能会有一些新功能,使其中的一些不必要。 ( $REAL_HOME
东西是我的怪异;假装说$HOME
– 虽然这使得一些脚本是不必要的。). .cronfile
负责环境设置 – 它做了很多,但这是我的问题,不是你的。
这可能是因为您正在寻找脚本中的相关目录/文件,这些目录/文件是从/ home /而不是从/ root运行的,因为/ root不在/ home / root中,也不会看起来像用户主文件夹在家/
你可以检查,看看它是否正在寻找相关的文件,或张贴脚本?
另一个说明,为什么你不把它设置为从用户的homefolder运行呢?
运行sh脚本的另一种方法是将你的bash脚本放在/usr/bin
目录中,只需运行命令bash yourscript.sh
而不需要添加/usr/bin/
目录