如何使用cron作业调用包含系统命令的ruby脚本?

如何使用cron作业调用包含系统命令的ruby脚本?,ruby,cron,Ruby,Cron,我有一个包含系统命令的ruby脚本,比如,当我从shell运行这个脚本时,它工作正常,但是当我将它添加到我的cron作业列表时,它不再工作了,cron作业如下: 10/***cd/home/hekin/usr/bin/ruby my_script.rb 知道我做的有什么不对吗?谢谢。试着把可能出错的地方分开。我能想到的是: cron语法-给定的时间值是否合法并适合您的shell 权限-相关目录和文件的执行权限和读取权限 引用-cron涵盖的范围是什么?它是否只运行第一个命令 为了剖析这一点,

我有一个包含系统命令的ruby脚本,比如,当我从shell运行这个脚本时,它工作正常,但是当我将它添加到我的cron作业列表时,它不再工作了,cron作业如下:

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


知道我做的有什么不对吗?谢谢。

试着把可能出错的地方分开。我能想到的是:

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

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

问题在于你的环境。在您的shell中进行测试时,您的shell环境为其提供了充分的装备和支持。在cron下运行时,它非常非常精简

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

谢谢大家的回答

这是我的错

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


“它不起作用”不是很有帮助。提供了什么错误?@Damien,没有错误消息(如果有,我不知道在哪里可以找到),问题是使用cronjob,我无法获取远程文件,但是使用shell命令,我可以让您尝试执行一些scp命令(如给定的URL)?您是否在远程计算机上安装了ssh密钥?或者您可以尝试将SFTP gem用于scp文件,而不是系统内部的scp。@bhups,它不是“系统内部”,因此SFTP无法工作。我已将公钥上载到远程计算机。@Comradin,绝对路径无效。更糟糕的是,我不知道错误消息在哪里。你可以做一些类似“scp”的事情user@host:/target/file/dest/file\u log 2>&1>/path/to/my\u log“这样,您将在my\u log文件中看到错误消息。@Yuval,您提到的3项我都试过了,运气不好,但还是谢谢您,令人印象深刻