一千萬個為什麽

搜索

使用Cron運行Ruby的問題

我的ruby文件是這樣的。

`mkdir #{HOST} -p`

It works fine by: ruby mycode.rb

但在一個cron工作

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

它將是 -p 文件夾。為什麽?

最佳答案

任何人遇到cron作業的第一個問題是,出於安全原因,cron作業通常使用最小的 $ PATH 運行。因此,它可能是你的cron作業運行的路徑與從shell運行腳本時的路徑不同,這意味著cron作業中的可能調用一個不同的 mkdir comman,它以不同的方式解釋它的參數。

Usually, the first filename argument stops option processing and everything that comes after that will be treated as a filename. So, since #{HOST} is a filename, everything after that will also be treated as a filename, which means that the call will be interpreted as "make two directories, one named #{HOST} and the other named -p" If you look for example at the specification of mkdir, it is simply illegal to pass an option after the filenames.

另一種可能性是,由於某種原因,#{HOST} 在cron下運行時將為空。然後整個調用擴展為 mkdir -p ,這又取決於你的 mkdir 的實現可能被解釋為“創建一個名為<�的目錄代碼> -p </代碼>”。

我不清楚為什麽你以錯誤的順序傳遞選項和操作數,而不是 mkdir -p#{HOST} 。我也不清楚為什麽你在所有中使用shell ,而不僅僅是 FileUtils.mkdir_p(HOST)

轉載註明原文: 使用Cron運行Ruby的問題