2009-02-28 43 views
2

如果我从/home/<user>/<dir>/script.sh运行脚本,以root身份cron的工作得很好。但是,如果我从/root/<dir>/script.sh运行脚本(再次以root身份),cron似乎不起作用。的Cron不运行从/根

+0

没有代码它会得到难以;-) – 2009-02-28 21:42:37

回答

2

我想你需要添加一些信息。我猜这是一个权限的事情。在你的crontab中添加文件,目录和行的权限,这样我们可以提供帮助。另外,如果你把它放在/ root中,你是否在root的crontab中运行它?

0

这可能是因为你正在寻找脚本相对目录/文件被从/家运行时,它位于/而不是从/根,因为/根不是在/ home /根,也没有它看起来像用户homefolder在/ home/

你可以检查,看看它是否正在寻找相关文件,或发布的脚本?

另一个说明,为什么你不把它设置为从用户的homefolder运行呢?

2

记住环境 - 尤其是当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 ${@:+"[email protected]"} 

我已经使用了一段时间了 - 这个版本自2001年 - 和它的作品一种享受我。我正在使用基本(Sun Solaris 10)实现cron;在其他平台上的cron新版本中可能会有新功能,以使其中的一些不必要。 (该$REAL_HOME的东西是我的怪事;假装它说$HOME - 尽管这使得一些脚本不需要你的。)的.cronfile负责环境设置 - 它确实不少,但是这是我的问题,不是你的。

3

已经使用“的cron”相抵触时,在过去的各种默认$路径运行,我总是充满了绝对的$ PATH拼写为每个可执行文件和每个目标文件。我总是假设'cron'没有设置$ PATH,并且没有当前工作目录。

换句话说不要使用如下命令

 "myprocess abc*.txt" 

,但这样做完全一样

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

或者,创建一个bash脚本,做这项工作,并调用bash脚本具有完全绝对路径,如

 "/usr/local/bin/myprocess_abc_txts". 

如果您需要在脚本中有一定的灵活性,请使用env在你用'cron'调用的bash脚本中专门设置的修饰变量。

0

另一种方式来运行sh脚本是将您的bash脚本在/usr/bin目录,并简单地运行命令bash yourscript.sh无需添加/usr/bin/目录