Cron不从/ root运行

如果我以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/目录