You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用PHP模拟Cron任务:解决主机仅支持30分钟执行间隔的问题

解决LMS每分钟Cron任务与主机30分钟限制的冲突问题

你的脚本只执行一次,大概率是路径错误、执行命令不完整,或者进程被主机中断导致的。下面是具体的排查和修正方案:

一、给脚本加日志定位问题

因为Cron后台运行看不到输出,必须把执行过程记录到日志里。修改cron_script.php如下:

<?php
set_time_limit(0);
// 换成你有权限写入的绝对路径,比如主机的日志目录或自己创建的文件夹
$log_file = '/home/你的用户名/logs/cron_loop.log';
$turns = 0;

// 记录脚本启动时间
file_put_contents($log_file, "脚本启动:" . date('Y-m-d H:i:s') . "\n", FILE_APPEND);

while ($turns < 30) {
    $start_time = date('Y-m-d H:i:s');
    file_put_contents($log_file, "第{$turns}次执行开始:{$start_time}\n", FILE_APPEND);
    
    // 关键:用绝对路径执行,避免Cron工作目录差异
    $php_cli_path = '/usr/bin/php'; // 可通过SSH执行`which php`获取真实路径
    $cron_file_path = '/home/你的用户名/public_html/training/admin/cli/cron.php'; // cron.php的绝对路径
    $output = [];
    $return_code = 0;
    
    // 2>&1 是把错误输出重定向到标准输出,方便记录错误
    exec("{$php_cli_path} {$cron_file_path} 2>&1", $output, $return_code);
    
    // 记录执行结果
    $end_time = date('Y-m-d H:i:s');
    file_put_contents($log_file, "第{$turns}次执行结束:{$end_time},返回码:{$return_code}\n", FILE_APPEND);
    if (!empty($output)) {
        file_put_contents($log_file, "执行输出:" . implode("\n", $output) . "\n", FILE_APPEND);
    }
    
    sleep(60);
    $turns++;
}

file_put_contents($log_file, "脚本执行完成:" . date('Y-m-d H:i:s') . "\n", FILE_APPEND);
?>

二、确认路径正确性

  • PHP CLI路径:SSH登录主机,执行which php,得到的就是系统默认的PHP命令绝对路径,比如/usr/local/bin/php
  • cron.php绝对路径:通过主机面板的文件管理器查看,或者在SSH里进入training/admin/cli目录,执行pwd获取完整路径
  • 日志文件路径:确保目标目录有写入权限,可先手动创建logs文件夹并设置权限为755

三、先手动测试脚本

不要直接等Cron触发,先在SSH里手动运行:

php /你的cron_script.php的绝对路径

观察日志文件是否正常生成,每一分钟是否有新的执行记录,这样能快速排查路径、权限或命令错误。

四、应对主机进程超时限制

如果主机限制单个进程运行时间(比如超过10分钟就强制终止),30分钟的循环脚本会被中断。可以拆分任务:
设置3个Cron任务,每个任务执行10次(运行10分钟):

  • 每小时的0分、30分执行:php /path/to/cron_script_10times.php(脚本里循环10次)
  • 每小时的10分、40分执行:同上
  • 每小时的20分、50分执行:同上

这样每个脚本只运行10分钟,避免被主机中断,同时保证每分钟都有一次Cron执行。

内容的提问来源于stack exchange,提问作者user2860417

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 07:52:42