这是解决为什么我的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,如附件中所示 .
现在我尝试从app文件夹运行Console / cake . 但没有输出,没有任何反应 . 最终我必须以Ctrl-C的方式离开它 .
然后我尝试使用我的php文件作为参数运行Console / cake(我的php文件在Console / Command文件夹中称为TestShell.php . 再也没有发生.
我的设置有什么问题吗?
编辑如下,包括电子邮件输出 .
注意我已经更改了我的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 回答
尝试使用此方法在cakephp中设置cron
在控制器的操作中编写代码 . 然后检查webroot文件夹中的cron_dispatcher.php . 在没有这样的文件从互联网上下载 . 谷歌你会很容易找到它 . 或者查看此链接Cron Dispatcher CakePHP 2.0然后在cpanel中设置以下路径: -
提醒你在你的代码的最后放一个die()否则会给ctp文件带来错误 . 或者为该函数添加一个空白的ctp文件 .
希望它会有所帮助
在Cake php的webroot文件夹中创建一个文件 . 该文件包含所有cron url及其时间如下: -
现在执行此命令
你的cron工作将被添加 . 您还可以通过以下命令列出每个用户下的所有cron作业 .
在
/cake
之后添加扩展.php