【问题标题】:how to invoke ruby script containing system command with cron job?如何使用 cron 作业调用包含系统命令的 ruby​​ 脚本?
【发布时间】:2009-11-16 20:53:58
【问题描述】:

我有一个包含像http://gist.github.com/235833 这样的系统命令的ruby 脚本,当我从shell 运行这个脚本时,它工作正常,但是当我将它添加到我的cron 作业列表时,它不再工作了,cron 作业就像:

10/* * * * * cd /home/hekin; /usr/bin/ruby my_script.rb

知道我所做的事情出了什么问题吗?谢谢。

【问题讨论】:

  • “它不起作用”不是很有帮助。提供了什么错误?
  • @Damien,没有错误消息(如果有的话,我不知道在哪里找到它),问题是使用cronjob,我无法获取远程文件,但使用shell命令,我可以
  • 您是否正在尝试执行一些 scp 命令(如在给定的 URL gist.github.com/235833 中)?您是否在远程机器上安装了 ssh 密钥?或者您可以尝试使用 SFTP gem 进行 SCPing 文件,而不是系统内的 scp。
  • @bhups,它不是“系统内部”,所以 sftp 不起作用。我已将我的公钥上传到远程机器。

标签: ruby cron


【解决方案1】:

谢谢大家的回答。

这是我的错。

由于我在本地机器上使用 ssh 密钥转发,当我从 shell 执行脚本时,与 ssh 密钥转发相关的环境变量都在那里,但是从 cron 作业上下文中,这些环境变量丢失了。

【讨论】:

    【解决方案2】:

    尝试将可能出错的事情分开。我能想到的有:

    • cron 语法 - 给定的时间值是否合法并适合您的 shell?
    • 权限 - 相关目录和文件的执行权限和读取权限
    • 引用 - cron 涵盖什么范围?它只运行第一个命令吗?

    为了剖析这一点,我建议您首先运行一个非常简单的 cron 作业,例如“ls”。接下来运行一个单行脚本。接下来将您的命令嵌入到 shell 脚本文件中。沿着这些思路,您应该会发现问题所在。

    【讨论】:

    • @Yuval,我已经尝试了你提到的所有 3 项,没有运气,但还是谢谢你,令人印象深刻
    【解决方案3】:

    问题在于您的环境。在您的 shell 中进行测试时,它配备齐全并由您的 shell 环境增强。在 cron 下运行时,它非常非常精简。

    目的地“。”在哪里?为您的脚本?我猜它将是“/”并且可能不是“$HOME”,因此您的脚本将无法在该位置写入并失败。尝试使用绝对路径作为目的地。

    【讨论】:

    • @Comradin,绝对路径不起作用。更糟糕的是,我不知道错误消息在哪里。
    • 好吧,您可以执行类似“scp user@host:/target/file /dest/file_log 2>&1 > /path/to/my_log”这样的操作,您将在my_log 文件。
    猜你喜欢
    • 1970-01-01
    • 2012-05-17
    • 2012-12-31
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 2017-10-26
    • 2011-08-15
    • 1970-01-01
    相关资源
    最近更新 更多