我的ruby文件是这样的。
`mkdir #{HOST} -p`
它可以正常工作:ruby mycode.rb
但是在cron工作中
0 * * * * ruby~ / backup.rb>>的backup.log
它将是-p
文件夹。为什么?
答案 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
或您平台上的同等产品。