2009-11-16 30 views
0

我有一个包含像http://gist.github.com/235833这样的系统命令的ruby脚本,当我从shell运行这个脚本时,它工作正常,但是当我将它添加到我的cron作业列表中时,它不再起作用,cron作业如下所示:如何使用cron作业调用包含系统命令的ruby脚本?

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

任何想法我做了什么错?谢谢。

+1

“不起作用”不是很有帮助。提供的错误是什么? – 2009-11-16 09:58:55

+0

@Damien,没有错误信息(如果有的话,我不知道在哪里可以找到它),问题是用cronjob,我无法获取远程文件,但使用shell命令,我可以 – leomayleomay 2009-11-16 10:13:08

+0

你试图执行一些scp命令(如给定的URL http://gist.github.com/235833)?你有没有在远程机器上安装ssh密钥?或者你可以尝试使用SFTP gem来获取SCPing文件,而不是系统内部的scp。 – bhups 2009-11-16 11:13:42

回答

0

尝试分离可能出错的事物。我能想到的是:

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

为了剖析这个,我建议你先运行一个非常简单的cron工作,比如'ls'。接下来运行一个单线程脚本。接下来将您的命令嵌入到shell脚本文件中。沿着这些线路,你应该找到问题。

+0

@Yuval,我已经尝试了你提到的所有3个项目,没有运气,但无论如何感谢你,令人印象深刻的 – leomayleomay 2009-11-16 12:04:52

0

问题在于你的环境。在您的外壳中进行测试时,您的外壳环境会提供充足的装备和提升。在cron下运行时,它非常非常精简。

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

+0

@Comradin,绝对路径不起作用。更糟糕的是,我不知道错误信息在哪里。 – leomayleomay 2009-11-16 11:57:29

+0

嗯,你可以做一些像“scp user @ host:/ target/file/dest/file_log 2>&1>/path/to/my_log”这样你会在my_log文件中看到错误信息。 – Comradin 2009-11-16 12:29:23

1

谢谢大家的回答。

这是我的错误。

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