【问题标题】:Script executes successfully in commandline but not as a cronjob脚本在命令行中成功执行,但不是 cron 作业
【发布时间】:2011-01-24 19:38:10
【问题描述】:

我有一个 bash 脚本,它运行一个 ruby​​ 脚本来获取我的 twitter 提要。

## /home/username/twittercron

#!/bin/bash

cd /home/username/twitter
ruby twitter.rb friends

在命令行中运行成功。

/home/username/twittercron

但是当我尝试将它作为 cronjob 运行时,它运行但无法获取提要。

## crontab -e

*/15 * * * * * /home/username/twittercron

脚本是 chmod +x。不知道为什么会这样。有什么想法吗?

【问题讨论】:

    标签: ruby bash cron


    【解决方案1】:

    我认为这可以通过强制 bash 充当登录 shell 来完成,因此它获取 .bashrc 等:

    */15 * * * * * /bin/bash -l -c '/home/username/twittercron'
    

    Here 是关于此的文章。

    【讨论】:

      【解决方案2】:

      我有很好的使用http://github.com/javan/whenever的经验

      它使用 Ruby DSL 来管理 cron 任务并处理设置所有环境魔法。

      every 3.hours do
        runner "MyModel.some_process"
        rake "my:rake:task"
        command "/usr/bin/my_great_command"
      end
      

      【讨论】:

        【解决方案3】:

        Ruby 版本管理器 (rvm) 导致了问题。我不得不像这样在 cron 中调用脚本。

        */15 * * * * bash -c 'source /home/username/.rvm/scripts/rvm && /usr/bin/env ruby /home/username/twitter/twitter.rb friends'
        

        【讨论】:

        • 我已经尝试解决这个问题大约一个星期了。非常感谢您!
        • 你可以使用整个 bashrc 来代替,假设它来自 rvm。 source $HOME/.bashrc && …
        【解决方案4】:

        检查您的邮件,看看是否有任何错误消息。在您的 bash 脚本中进行一些调试,例如在最后一行 echo done>debug.log 并查看是否创建了 debug.log。删除脚本中的## /home/username/twittercron 并将#!/bin/bash 放在第一行。

        */15 * * * * * /bin/bash /home/username/twittercron
        

        【讨论】:

        • 代替 debug.log,尝试:MAILTO=your@email.addy(在 crontab 中),然后运行 ​​/bin/bash -x /home/username/twittercron 作为 cron 命令。这将在最后通过电子邮件发送完整的跟踪。
        • 我的 /var/log/syslog & /var/log/cron.log 显示命令运行但没有抛出错误。
        【解决方案5】:

        您的 crontab 中有太多 *s。

        【讨论】:

          【解决方案6】:

          您需要提供执行命令的绝对路径(或通过 env)。

          */15 * * * * * /usr/bin/env sh /home/username/twittercron
          

          或者:

          */15 * * * * * /usr/bin/env ruby /home/username/twitter/twitter.rb friends
          

          【讨论】:

          • 这是他正在运行的 bash 脚本。
          • 您期待什么结果?它会写入文件或数据库吗?还是您只是在等待系统将 crontab 的标准输出邮寄给您?
          猜你喜欢
          • 2018-05-20
          • 2013-09-01
          • 2017-10-26
          • 1970-01-01
          • 1970-01-01
          • 2015-12-13
          • 2019-06-05
          • 2014-04-16
          • 1970-01-01
          相关资源
          最近更新 更多