Cron不从/ root运行

时间:2009-02-28 21:39:39

标签: linux cron

如果我从/home/<user>/<dir>/script.sh以root身份运行脚本,那么cron的效果非常好。但是,如果我从/root/<dir>/script.sh(再次以root身份)运行脚本,则cron似乎不起作用。

5 个答案:

答案 0 :(得分:3)

在使用'cron'时,在过去与各种默认$ PATH发生冲突时,我总是拼写每个可执行文件和每个目标文件的绝对$ PATH。我总是认为'cron'设置了NO $ PATH并且没有当前工作目录。

换句话说,不要使用像

这样的命令
       "myprocess  abc*.txt"

但完全像

一样
        "/usr/localbin/myprocess    /home/jvs/abc*.txt".

或者,创建一个执行该作业的bash脚本,并使用完整的绝对路径调用该bash脚本,例如

       "/usr/local/bin/myprocess_abc_txts".

如果您需要在脚本中具有一定的灵活性,请使用在您使用“cron”调用的bash脚本中专门设置的环境变量。

答案 1 :(得分:2)

我认为您需要添加更多信息。我猜它是权限的东西。在crontab中添加文件,目录和行的权限,以便我们提供帮助。另外,如果你把它放在/ root中,你是否在root的crontab中运行它?

答案 2 :(得分:2)

记住环境 - 特别是在由cron而不是由root运行时。当cron运行某些东西时,你可能没有任何环境设置,这与通过at运行命令不同。目前还不清楚当前目录是什么。因此,对于将由cron运行的命令,请使用脚本(正如您已经在做的那样)并确保它设置足够的环境以使其运行。并确保您的环境设置代码不是交互式的!

在我的机器上,我有一个机制,使得cron条目读取(例如):

23 1 * * 1-5 /usr/bin/ksh /work1/jleffler/bin/Cron/weekday

weekday目录中的Cron脚本是指向首先设置环境然后运行命令/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负责环境设置 - 它确实很多,但那是我的问题,不是你的问题。

答案 3 :(得分:0)

可能是因为你正在寻找脚本中的相对目录/文件,这些目录/文件是从/ home /而不是从/ root运行时找到的,因为/ root不在/ home / root中也不会看起来像/ home /

中的用户家庭文件夹

您可以检查并查看是否正在查找相关文件,或发布脚本吗?

另外请注意,为什么不将它设置为从用户的主文件夹运行呢?

答案 4 :(得分:0)

运行sh脚本的另一种方法是将bash脚本放在/usr/bin目录中,只需运行命令bash yourscript.sh而不添加/usr/bin/目录