代码之家  ›  专栏  ›  技术社区  ›  Cheng

使用Cron运行Ruby时出现问题

  •  0
  • Cheng  · 技术社区  · 16 年前

    我的ruby文件是这样的。

    `mkdir #{HOST} -p`
    

    它的工作原理是: ruby mycode.rb

    0****ruby~/backup.rb>&燃气轮机;备份.log

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

    2 回复  |  直到 16 年前
        1
  •  2
  •   Jörg W Mittag    16 年前

    任何使用cron作业的人都会遇到的一个问题是,出于安全原因,cron作业通常使用最小的 $PATH . 所以,它 您的cron作业运行的路径与从shell运行脚本时不同,这意味着它是 可能的 mkdir comman被调用,它对其参数的解释不同。

    通常 ,第一个filename参数停止选项处理,之后的所有内容都将被视为文件名。所以,自从 #{HOST} 将被视为文件名,这意味着调用将被解释为“生成两个目录,其中一个名为 另一个叫 -p “如果你看看 ,传递选项完全是非法的

    在cron下运行时将为空。然后整个呼叫扩展到 mkdir -p mkdir公司 可以 被解释为“创建一个名为 -第 ".

    我不太清楚,为什么要以错误的顺序传递选项和操作数,而不是 mkdir -p #{HOST} 完全 ,而不仅仅是 FileUtils.mkdir_p(HOST) .

        2
  •  1
  •   Sterling Camden    16 年前

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

    #!/usr/bin/env ruby

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

    #!/usr/local/bin/ruby