我正在尝试设置 cronjobs 来定期向客户发送一些电子邮件,但我没有看到任何输出,我在这里编写的测试是 crontab 行
* * * * * php /var/www/html/pms/notices/test.php
这是 test.php 代码
<?php
include(__DIR__ . "/config.php");
$log_message = 'It works';
error_log($log_message . "On:" . date("l jS \of F, Y, h:i:s A P") . "\n", 3, ROOT_PATH .'Logs/activity.log');
<?
我期望 activity.log 文件每分钟都会写入“它有效”,但什么都没有。我做错了什么吗?如果是,那是什么?或者我在哪里可以找到关于如何设置 cron 作业的良好教程我尝试将我的行更改为
* * * * * /usr/bin/php -q /var/www/html/pms/notices/test.php
正如另一个问题所建议的那样,但这并没有帮助
答案1
cron 运行时环境与交互式环境不同,交互式环境也与 at/batch 环境不同。
在每个环境中运行此程序,然后比较文件:
(echo "=== set ===";set;echo "===env ==="; env | sort;echo "=== alias ===";alias) >a_different_log
我这样做了,并得到了:
walt@bat:~(0)$ ll *.environment
-rw-rw-r-- 1 walt walt 10672 Oct 22 13:59 at.environment
-rw-rw-r-- 1 walt walt 10672 Oct 22 13:57 batch.environment
-rw-rw-r-- 1 walt walt 1031 Oct 22 14:00 cron.environment
-rw-rw-r-- 1 walt walt 126378 Oct 22 13:55 interactive.environment
walt@bat:~(0)$ wc -l *.environment
238 at.environment
238 batch.environment
48 cron.environment
3642 interactive.environment
您的环境中某些 PHP 运行所需的设置未在 cron 环境中设置。您必须手动设置它,或将您的命令包装在设置环境的 bash 脚本中。
答案2
有可能/usr/bin/php
不在 cron 中$PATH
。尝试这样的 crontjob:
* * * * * /usr/bin/php /some/file.php