首页 文章

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

提问于
浏览
0

这是解决为什么我的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正在执行错误的事情,因为输出似乎是关于“烘焙” .

之后,我尝试删除cron job命令的“php”,以便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

    尝试使用此方法在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文件 .

    希望它会有所帮助

  • 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
    
  • 0

    /cake 之后添加扩展 .php

    php bin/cake.php server...
    

相关问题