2013-03-06 73 views
1

我有一臺運行Ubuntu 12.04的服務器,我們用它來託管一個Rails應用程序。我上運行的cron任務,它是由一對夫婦的UNIX命令的由&&分離 - 如:cd到符號鏈接的目錄在cron環境中失敗

cd /home/deploy/app/current && RAILS_ENV=production ... 

最後一位被剪斷,但該命令的第一個cd失敗,與此:

CD:沒有這樣的文件或目錄

部署用戶的環境,CD作品沒有問題。該目錄存在,它是一個符號鏈接:

lrwxrwxrwx 1 deploy deploy 42 Mar 4 15:28 /home/deploy/app/current -> /home/deploy/app/releases/20130304152305 

我覺得很奇怪,對於殼CD符號鏈接的能力會受到環境的影響,所以我吐出的cron環境變量一個文件,根據這個問題:How to simulate the environment cron executes a script with?

如果我嘗試和執行行cron的用戶,它失敗:

$ env - $(cat ~/cron.env) cd /home/deploy/app/current 
env: cd: No such file or directory 

爲什麼會出現這種情況?這個cron的環境變量是:

HOME=/home/deploy 
LOGNAME=deploy 
PATH=/usr/bin:/bin 
LANG=en_US.UTF-8 
SHELL=/bin/sh 
PWD=/home/deploy 

回答

1

cd是一個shell內建命令,不是一個程序,所以也不cron也不env不能直接執行它。以下應該適用於您的cron作業:

sh -c "cd /home/deploy/app/current && RAILS_ENV=production ..." 
+0

這對我所看到的有意義。我總是認爲cron會自動在shell中運行命令,但事實證明這不是真的!謝謝 – 2013-03-06 14:49:46