Cakephp控制台/蛋糕不适用于Cron Job

时间:2014-06-06 04:34:33

标签: cakephp ssh cron cpanel

这是解决为什么我的Cron作业通过CPanel设置来运行Cakephp shell的原因的一部分,不起作用。

在阅读http://book.cakephp.org/2.0/en/console-and-shells.html后,这是我最初的做法 我通过CPanel cronjob创建了每1分钟运行以下命令:

php /home4/theadvop/public_html/app/Console/Cake test

我希望它能够执行TestShell.php(存储在Console / Command中)。这个TestShell.php是一个扩展了Appshell的类,它有一个main()函数,用PHP代码发送测试邮件。

以上所有内容均无效,未发送任何电子邮件,也未在任何地方生成错误日志。所以我决定通过SSH手动测试一些东西,如下图所示,奇怪的是,它没有输出。

通过SSH我已浏览到我的app目录并尝试运行Console / cake,我得到权限错误。 所以我做了一个chmod,如附件中所示。 enter image description here

现在我尝试从app文件夹运行Console / cake。但没有输出,没有任何反应。最终我必须以Ctrl-C的方式离开它。 enter image description here

然后我尝试使用我的php文件作为参数运行Console / cake(我的php文件在Console / Command文件夹中称为TestShell.php。再也没有发生。 enter image description here

我的设置有什么问题吗?

以下编辑包含电子邮件输出。

注意我已经将Console / Command / TestShell.php更改为输出一行,就像这样。它不再尝试发送电子邮件(为了简单起见)

echo "This is an output from testshell";

我的Cron Job在运行时:

php /home4/theadvop/public_html/app/Console/Cake test

将导致Cron发送给我的电子邮件如下:

Content-type: text/html

################################################################################
#
# Bake is a shell script for running CakePHP bake script
#
# CakePHP(tm) :  Rapid Development Framework (http://cakephp.org)
# Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
#
# Licensed under The MIT License
# For full copyright and license information, please see the LICENSE.txt
# Redistributions of files must retain the above copyright notice.
#
# @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
# @link          http://cakephp.org CakePHP(tm) Project
# @package       app.Console
# @since         CakePHP(tm) v 1.2.0.5012
# @license       http://www.opensource.org/licenses/mit-license.php MIT License
#
################################################################################

# Canonicalize by following every symlink of the given name recursively
canonicalize() {
        NAME="$1"
        if [ -f "$NAME" ]
        then
                DIR=$(dirname -- "$NAME")
                NAME=$(cd -P "$DIR" && pwd -P)/$(basename -- "$NAME")
        fi
        while [ -h "$NAME" ]; do
                DIR=$(dirname -- "$NAME")
                SYM=$(readlink "$NAME")
                NAME=$(cd "$DIR" && cd $(dirname -- "$SYM") && pwd)/$(basename -- "$SYM")
        done
        echo "$NAME"
}

CONSOLE=$(dirname -- "$(canonicalize "$0")")
APP=$(dirname "$CONSOLE")

exec php -q "$CONSOLE"/cake.php -working "$APP" "$@"
exit

不明白以上但我认为Cron正在执行错误的事情,因为输出似乎是关于"烘焙"。

之后我试图删除" php" cron job命令,所以cron运行这个:

/home4/theadvop/public_html/app/Console/Cake test
然后,Cron发给我以下电子邮件:

/home4/theadvop/public_html/app/Console/cake: fork: retry: Resource temporarily unavailable
/home4/theadvop/public_html/app/Console/cake: fork: retry: Resource temporarily unavailable
/home4/theadvop/public_html/app/Console/cake: fork: retry: Resource temporarily unavailable
/home4/theadvop/public_html/app/Console/cake: fork: retry: Resource temporarily unavailable
/home4/theadvop/public_html/app/Console/cake: fork: Resource temporarily unavailable
No input file specified.

我仍然不知道我做错了什么。

3 个答案:

答案 0 :(得分:0)

尝试使用此方法在cakephp中设置cron

在控制器的操作中编写代码。 然后检查webroot文件夹中的cron_dispatcher.php。 在没有这样的文件从互联网上下载。谷歌你会很容易找到它。或者点击此链接Cron Dispatcher CakePHP 2.0 然后在cpanel中设置以下路径: -

  php /home4/theadvop/public_html/app/webroot/cron_dispatcher.php /controller/action

提醒你在你的代码的末尾添加一个die(),否则会给ctp文件带来错误。或者为该函数添加一个空白的ctp文件。

希望它会有所帮助

答案 1 :(得分:0)

在cake php的webroot文件夹中创建一个文件。该文件包含所有cron url及其时间如下: -

 * 10 * * * /usr/bin/curl http://cronurl/

现在执行此命令

 crontab /path/to/file

您的cron作业将被添加。 您还可以通过以下命令列出每个用户下的所有cron作业。

for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l; done

答案 2 :(得分:0)

boolean getPath(boolean[][] maze, int row, int col, ArrayList<Point> path, HashSet<Point> failedPoints){ /*if out of bounds or not available, return*/ if(col<0 || row<0 || !maze[row][col]){ return false; } Point p = new Point(row,col); /* If we've already visited this cell return*/ if(failedPoints.contains(p)){ return false; } boolean isAtOrigin = (row == 0) && (col == 0); /*If there's a path from start to my current location, add my location.*/ if(isAtOrigin || getPath(maze,row,col -1, path, failedPoints) || getPath(maze,row-1, col, path,failedPoints)){ path.add(p); return true; } failedPoints.add(p); //Cache result return false; }

之后添加展示.php
/cake