这是解决为什么我的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正在执行错误的事情,因为输出似乎是关于"烘焙"。
之后我试图删除" 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.
我仍然不知道我做错了什么。
答案 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