2012-11-08 63 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设置后,我也遇到了这个问题。然后提到解决它的绝对路径。