2009-05-04 111 views
3

使用cron運行腳本時,任何內部調用的可執行文件都必須具有完整路徑。我發現這個試圖運行wondershaper,當它試圖調用tc時出現許多錯誤。所以我的問題是,解決這個問題的正確方法是什麼?使用cron運行腳本的正確方法?

可能的解決方案:

  • cd到可執行文件的文件夾,並準備符號鏈接到任何其他所謂的可執行文件有(不知道它的工作原理 - 低可移植性)
  • 使用完整路徑的腳本(它的工作原理 - 在不同的發行版低可移植性)
  • 出口與所需的路徑的路徑變量的腳本(如果不知道它的工作原理)

那麼,在此先感謝內對任何人的幫助。

+0

就是 「平頭」 你的意思是這裏的引導程序? – dmckee 2009-05-04 13:26:38

+0

大聲笑,我的意思是cron一路:$ – Doppelganger 2009-05-04 13:41:52

回答

3

在你的cron作業中聲明變量更明確,更容易維護:你所要修改的所有內容都包含在你的cron作業中,而且你不需要傳輸多個文件你應該把它移到另一個系統。

PATH=/usr/bin:/your/fancy/dir 
MYAPPROOT=/var/lib/myapp 

*/2 * * * * myappinpath 
*/3 * * * * $MYAPPROOT/mylocalapp 
4

如果你使用的是linux/bsd/mac,你可以在crontab的右邊設置一些環境變量,如PATH,這樣你通常可以很好地運行。

如果你在Solaris上,那麼我爲你祈禱。在運行任何東西之前我一般源.profile::但是,我確實有一個答案太

0 0 * * 0 . /home/myuser/.profile && cd /path && ./script 

你要知道,我的.profile負荷.bash_profile.bashrc。只要確定你的源文件有你需要的就可以。

3

由於cron不會運行登錄,因此.profile和/ etc/profile不會被採用。因此PATH可能不會被設置爲您所期望的值。我會在腳本

您與符號鏈接招假定使用

  • 設置和導出路徑適當的值
  • 使用完整路徑。是在路徑中,只是看起來不太好

1

我recomendation:

坐落在一個外部文件中的所有變量。我使用位於/ etc/process_name或類似文件中的'process_name.env'文件。想象一下你有一個備份腳本。那麼你:

  • 創建/etc/backup.env並放入執行「備份」任務所需的所有環境變量。
  • 修改您的備份腳本和Shebang後添加此行:

    。 /etc/backup.env#備份環境的完整路徑前有一個點和一個空格。

IMO這種方法比在科雷定義聲明變量,因爲更好:

  • 易於維護。只需編輯一個文件。
  • 輕鬆切換配置/集中配置:
    • 你可以有多個.ENV使用在不同情況下的腳本(例如,考慮你有你的.ENV備份位置,你可以通過.ENV位置爲一個參數並運行你的cron工作,每天提供一個.env幾個位置,每週提供另一個.env,只是一個例子)。
  • 您可以將.env文件保存在像SVN或Git這樣的VCS中。
  • 很容易測試你的腳本(不需要從CRON執行它)。

問候