首页 > 解决方案 > 通过 cron 作业发送 HTTP 请求

问题描述

我有一个部署在服务器中的 PHP 文件:

/var/www/html/cron/leave_mail.php

此 PHP 文件中的代码只是通过 CURL 发送请求(url 的服务器与 cron 作业的服务器相同):

<?php

$url = "http://my-site.build.com/sendmail/sendmail_leave";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, TRUE); // remove body
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$head = curl_exec($ch);

curl_close($ch);

?>

现在我在部署 PHP 文件的同一台服务器上创建了一个 cron 作业:

* * * * * php /var/www/html/cron/leave_mail.php

1 分钟后,它没有执行 PHP 文件中的命令,但是,我可以在系统日志中看到 cron 作业正在运行。

我用 ubuntu os 运行我的本地虚拟机并创建了相同的 cron 作业,执行相同的文件。1 分钟后,我可以看到它执行了 PHP 文件中的命令,因为数据库上的数据已更新。

我真的很困惑为什么服务器上的 cron 作业没有执行 PHP 命令。我被困在这个问题上。

标签: phpcurlcron

解决方案


从查找 PHP 在哪里开始:

which php

然后通过运行以下命令更新 crontab:

crontab -e

然后使用正确的 PHP 路径更新该行:

* * * * * root /usr/bin/php /var/www/html/cron/leave_mail.php

另请注意,您可以在路径之前指定用户。希望这会有所帮助。


推荐阅读