【问题标题】:Cron does not run from /rootCron 不从 /root 运行
【发布时间】:2012-10-03 15:47:56
【问题描述】:

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

【问题讨论】:

  • 没有代码会很困难 ;-)
  • 是的,我们需要代码,我们需要确切地知道它是如何不起作用的。

标签: linux cron


【解决方案1】:

过去在使用 '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 脚本中专门设置的环境变量。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      记住环境 - 尤其是当由 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 负责环境设置 - 它做了很多,但仅此而已我的问题,不是你的。

      【讨论】:

        【解决方案4】:

        这可能是因为您正在寻找脚本中的相对目录/文件,这些目录/文件在从 /home/ 运行而不是从 /root 运行时位于,因为 /root 不在 /home/root 中,也不像/home/中的用户主文件夹

        你能检查一下它是否在寻找相关文件,或者发布脚本吗?

        另一方面,您为什么不直接将其设置为从用户的主文件夹运行呢?

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-08-17
            • 2014-07-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-11-12
            相关资源
            最近更新 更多