使用Cron运行Ruby的问题

时间:2010-04-15 23:05:35

标签: ruby linux cron

我的ruby文件是这样的。

`mkdir #{HOST} -p`

它可以正常工作:ruby mycode.rb

但是在cron工作中

0 * * * * ruby​​~ / backup.rb>>的backup.log

它将是-p文件夹。为什么?

2 个答案:

答案 0 :(得分:2)

任何人遇到cron作业的第一个问题是,出于安全原因,cron作业通常以最小$PATH运行。因此,它可能是你的cron作业运行的路径与从shell运行脚本时的路径不同,这意味着它可能可能在cron作业中调用一个不同的mkdir comman,它以不同的方式解释它的参数。

通常,第一个文件名参数会停止选项处理,之后的所有内容都将被视为文件名。因此,由于#{HOST}是一个文件名,所以之后的所有内容将被视为文件名,这意味着该调用将被解释为“制作两个目录,一个名为{{1}另一个名为#{HOST}“如果您在-p的规范中查找示例,则在文件名之后传递选项是完全违法的。

另一种可能性是,在cron下运行时,由于某些原因,mkdir将为空。然后整个调用扩展为#{HOST},这又取决于您的mkdir -p 的实现可能被解释为“创建一个名为mkdir的目录”。

我不清楚为什么你以错误的顺序传递选项和操作数,而不是-p。我也不清楚你为什么要使用shell ,而不仅仅是mkdir -p #{HOST}

答案 1 :(得分:1)

我看到的另一个问题是#!使用/ usr / bin / env时脚本行失败。例如:

#!/usr/bin/env ruby

在cron下运行时找不到ruby。你必须使用

#!/usr/local/bin/ruby

或您平台上的同等产品。