2012-11-08 59 views
0

我想了解如何設置Shell作爲cron運行,我在/app/Console/Command/TaskEmailerShell.php創建了一個TaskEmailerShell.php文件,代碼如下:將shell作爲cronjob運行

App::uses('CakeEmail', 'Network/Email'); 

class TaskEmailerShell extends AppShell { 
    public $uses = array('Task'); 

    public function main() 
    { 
     // GENERATE AND SEND THE EMAIL 
     // ------------------------------------------------------------> 
     $email = new CakeEmail(); 
     etc etc 

我按照說明書here當cron的運行我得到這個錯誤:

/home/village/public_html/app/Console/cakeshell: line 14: cake: command not found 

我的cron命令是:

/home/village/public_html/app/Console/cakeshell TaskEmailer -cli /usr/bin -console /Cake/Console -app /home/village/public_html/app >> /home/village/public_html/emailer_log.log 

任何建議,我哪裏錯了?

+0

你是否指定了你的代碼執行的頻率? – Yamaneko

+0

'cakeshell'的第14行是什麼? – Jens

回答

1

cakeshell腳本你指的是有需要cake控制檯二進制文件中的某個位置路徑,或者(至少從看使用示例),爲您所指定的完整路徑控制檯與-console論據。看起來你在那裏有一個相對路徑。

我個人建議直接從你的cron作業調用蛋糕控制檯。隨着其他需求的增加,您最終可能會編寫一個像cakeshell這樣的腳本來包裝控制檯。你可以嘗試這樣的:

# m h dom mon dow command 
*/5 * * * * /home/village/public_html/lib/Cake/Console/cake -app '/home/village/public_html/app/' TaskEmailer >> /home/village/public_html/emailer_log.log 
1

Command not found通常意味着你PATH的問題。從cron運行的程序可能甚至沒有設置PATH。任何由cron啓動的腳本必須在開始附近設置PATH,否則它不會找到它應該運行的任何程序。

0

錯誤發生在文件cakeshell中的第14行:$ cmd。 CMD設定在第4行

#!/bin/bash 
TERM=dumb 
export TERM 
cmd="/opt/lampp/htdocs/MyApp/app/Console/cake" 
while [ $# -ne 0 ]; do 
if [ "$1" = "-cli" ] || [ "$1" = "-console" ]; then 
PATH=$PATH:$2 
shift 
else 
cmd="${cmd} $1" 
fi 
shift 
done 
$cmd 

原來4號線是

cmd="cake" 

將其更改爲絕對路徑,如:

cmd="/opt/lampp/htdocs/MyApp/app/Console/cake" 

其中MyApp的是應用程序目錄。即使在PATH設置後,我也遇到了這個問題。然後提到解決它的絕對路徑。