Crontab不执行我的php文件。
我已经设置了"crontab -e“,如下所示
*/1 * * * * /usr/bin/php /var/www/html/books_loader/cron_jobs/CronBooksLoader.php如你所见,我希望它每分钟都能运行。我的php文件夹是"/usr/bin/php“。我的"CronBooksLoader.php“位于正确的目录下,它拥有所有必要的权限(甚至777)。
"CronBooksLoader.php“包含以下代码
<?php
namespace BooksLoader\Base;
require '../vendor/autoload.php';
$bookObj = new Books();
$loadFiles = $bookObj->load('../xmlData');
$result = $bookObj->upsert();当我在浏览器(jobs/CronBooksLoader.php)中启动时,成功地从该目录中的XML文件加载数据。
我不能100%确定文件是否没有被执行,或者只是那个cron不知道该做什么。
*更新*
在发表了这么多评论之后。Cron运行并创建日志。我搞错了
PHP Warning: require(../vendor/autoload.php): failed to open stream: No such file or directory in /var/www/html/books_loader/cron_jobs/CronBooksLoader.php on line 4
PHP Fatal error: require(): Failed opening required '../vendor/autoload.php' (include_path='.:/usr/share/php') in /var/www/html/books_loader/cron_jobs/CronBooksLoader.php on line 4但我想不出怎么才能找到一条正确的道路。我希望它保持相对。
发布于 2018-12-07 13:50:28
如果你不太清楚,请使用curl**,** lynx 或 wget.
脚本执行是在中进行的,是在两个非常不同的环境中执行的,具体取决于您是使用HTTP还是使用PHP二进制。
当您通过curl、lynx或wget调用它时,它在web服务器的环境中执行。当您通过PHP二进制文件调用它时,它在命令行环境(CLI)中执行。
最明显的区别之一是工作目录是不同的,因此这一行:
require '../vendor/autoload.php';当您在/var/www/yoursite/htdocs中运行它或在/tmp中运行它时,意味着两种不同的事情(cron的work通常在那里)。
还有,,还有其他的区别。通常,您会使用特定的“利用”脚本来修改环境,使其模拟Web请求,并在其中运行脚本。或者在CLI脚本中使用完全不同的方法(不同的DB连接等等)。
如果您不准备这样做,那么使用curl就更好了。
即使这样,也要验证主机名是否匹配(机器可能“不知道”它的网站地址对应于什么,或者可能没有正确地连接到它。您可能需要在地址为127.0.0.1的/etc/主机中添加web名称(例如"www.yoursite.com")和/或在环回接口上添加一个侦听端口和为网站添加一个127.0.0.1别名。否则,您会注意到"curl http://www.yoursite.com/cron.php“没有连接,没有超时,或者报告了一些HTTP错误。
另外:在cron脚本中,一定要添加一个"2>&1“重定向,以捕获任何stderr消息并将它们发送给您:
* * * * * /usr/bin/curl http://www.yoursite.com/cron_jobs/CronBooksLoader.php 2>&1(*/1与*相同)
=利用实例
与其说是一种工具,不如说是对需要在这两种情况下执行的文件的修改。
<?php
if (php_sapi_name() === 'cli') {
// Simulate a Web call.
$dir = dirname(__FILENAME__);
// We must know how deep in the Web hierarchy this file is,
// and the CLI does not know. We must tell it.
// The root web directory has depth 0.
$depth = 1;
while($depth--) {
$dir = dirname($dir);
}
chdir($dir);
// Prepare a $_SERVER
$_SERVER = array(
'REMOTE_ADDR' => '127.0.0.2',
// Add as needed.
);
}
?>发布于 2018-12-07 13:51:47
确保您的当前计算机上安装了cron。
关于CentOS/RHEL:
yum install cronie
在Linux/Unix上:
apt-get install cron
尝试在Linux/Unix和crontab -e上使用cron
有关cron的详细信息,请参阅答案:https://serverfault.com/questions/449651/why-is-my-crontab-not-working-and-how-can-i-troubleshoot-it
发布于 2018-12-10 16:57:27
在某些共享主机上,它们可能运行cPanel,并且使用1H,您的crons可能在不同的环境中运行。这意味着您正在运行一个被监禁的环境(比如无法访问主目录之外的文件),或者限制您的内存等等。有关详细信息,请参阅此页面:http://docs.1h.com/index.php?title=Crond
它的不足是:
从着色环境中排除帐户 要将某个用户从着色环境中排除在外,只需访问cron.exclude文件夹并创建以下空文件: /var/spool/cron.exe/user.chroot
和
将帐户排除在全局限制之外 要将某个用户排除在全局限制之外,您需要创建以下文件: /var/spool/cron.exe/spool.限值
https://stackoverflow.com/questions/53670589
复制相似问题