2012-06-17 66 views
0

一些設置背景第一:PHP的cronjob改變SH根

  • 我有一個運行名爲worker_cronjob一個PHP文件,一個cronjob。所有的文件確實是從混帳下載我的工作人員和cron.d中的cronjob看起來像:

    */1 * * * *的Ubuntu /家庭/ Ubuntu的/ worker_cronjob >> /home/ubuntu/worker.log

  • 它包括worker_despatcher文件

  • 哪個觸發了與(ROOT是一個abolsute路徑到我的目錄)子過程:

    $ PID = EXEC(sprintf的(「%S>%S 2> 「/ worker/encoder.php」。$ arg_string,ROOT。「/ worker/encoder.log」));回到頂端這篇文章中的信息適用於:

問題是,在cronjob下,此方法正在改變系統命令的運行方式,更具體地說是sh。所以,當我運行如下命令:

ffmpeg 

它返回:

sh: 1: ffmpeg: command not found 

試錯後,我發現這只是從的cronjob發生,在某種程度上它改變目錄的設置方式,多像chroot沒有我叫chroot。

我看了其他線程,它說它創建cronjobs和運行文件時使用完整路徑,但它不是我的文件,這是問題,他們都通過絕對路徑引用,它運行已安裝的程序,我遇到問題。

絕對路徑是否也適用於已安裝的應用程序,或者是否有辦法打破此功能,讓我恢復只用一個字運行命令的功能?

+3

的使用也絕對路徑ffmpeg的命令,並看看會發生什麼 –

+2

創建被稱爲在的cronjob線bash腳本。因此,您可以更輕鬆地配置如何調用ffmpeg,並且可以模擬當root或其他某個用戶在其他shell中調用不同環境和所有內容時發生的情況。 – hakre

+0

事實上,似乎我必須這樣做,因爲在我的PHP腳本中使用絕對路徑來調用它只是令人討厭。但是,是使用絕對路徑工作,個人非常奇怪的行爲,在我看來,感謝您的幫助:) – Sammaye

回答

1

後面的原因是cronjobs是由系統運行,所以他們對你的shell或用戶環境變量一無所知。你可以說他們運行在最小環境

詳細的答案可以在Reasons why crontab does not work找到。

在上面的鏈接資源中未示出的另一種方法是:

* * * * * PATH=/usr/bin; command >> /var/log/command.log 
+0

啊,很好的答案我知道這適用於文件和什麼不是,但我一直認爲有什麼特別的應用程序,似乎不感謝:) – Sammaye