【问题标题】:Cron is running in home directory instead of file directoryCron 在主目录而不是文件目录中运行
【发布时间】:2015-06-03 04:13:39
【问题描述】:

我关注了 stackoverflow 中的其他一些帖子,并使用rvm cron setup 成功设置了 RVM 的 cron,并将一些 ENV 注入到 crontab 文件中。

当我对dotenv gem 不起作用的原因进行故障排除时,我意识到以下几点:

我将我的test.rb 放在文件路径/home/myuser/ruby/test.rb 中,我的crontab 文件如下所示:

* * * * * ruby /home/myuser/ruby/test.rb >> /home/myuser/ruby/output.log

当我将 test.rb 的输出与Dir.pwd 放在一起时。输出表明 rb 在/home/myuser/ 目录而不是/home/myuser/ruby 目录中运行。

虽然我通过手动更改路径获得了修补程序。但我想知道为什么会这样。

【问题讨论】:

  • 默认情况下,如果你不改变你当前所在的目录,你的用户的家是“你所在的地方”。您想要做的是“更改”目录,然后执行您的脚本。考虑:* * * * * cd /home/myuser/ruby/ && ruby ./test.rb >> /home/myuser/ruby/output.log.
  • @PawełDawczak 刚刚尝试过。你说的对!谢谢
  • 很高兴它有帮助!刚刚创建了正确的答案!祝你好运!

标签: ruby cron rvm


【解决方案1】:

默认情况下,用户的 cron 任务从用户的主目录执行。为了从正确的目录执行脚本,你必须“cd”到它。

考虑将您的 crontab 更改为:

* * * * * cd /home/myuser/ruby && ruby ./test.rb >> /home/myuser/ruby/output.log

祝你好运!

【讨论】:

  • 或者只是调整代码以使用绝对路径,就像您已经(不必要地)使用重定向一样。
【解决方案2】:

根据在评论中留下答案的@Pawel Dawczak 所说。

解决办法是将crontab中的语句改写为

* * * * * cd /home/myuser/ruby && ruby test.rb >> /home/myuser/ruby/output.log

谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-03
    • 2012-04-16
    • 2013-08-23
    • 1970-01-01
    • 2015-08-31
    • 2015-02-07
    • 1970-01-01
    相关资源
    最近更新 更多