0

0

php代码示例怎么实现定时任务_php定时任务代码示例【示例】

看不見的法師

看不見的法師

发布时间:2026-02-04 12:52:02

|

123人浏览过

|

来源于php中文网

原创

PHP不支持原生定时任务,必须依赖系统级调度(如Linux的cron或Windows任务计划程序)调用PHP CLI脚本;需避免Web环境模拟、确保时区/日志/原子性,并用数据库调度表实现动态任务。

php代码示例怎么实现定时任务_php定时任务代码示例【示例】

PHP 本身不支持原生定时任务,得靠系统级调度

PHP 是脚本语言,执行完就退出,sleep()while(true) 在 Web 环境里根本不可靠:超时会被 Nginx/Apache 杀掉,进程可能被 PHP-FPM 回收,还容易堆积僵尸进程。真要跑定时任务,必须交给操作系统层面的 cron(Linux/macOS)或任务计划程序(Windows)来触发 PHP 脚本。

用 cron 调用 PHP CLI 脚本最稳妥

写一个纯命令行可用的 PHP 文件,确保它不依赖 Web Server 环境(比如不调用 $_GET、不输出 HTML),然后用系统 cron 定期执行它。

示例脚本 /var/www/myapp/tasks/backup.php

// 记录日志,确认是否真的被执行
file_put_contents('/var/log/myapp/backup.log', date('Y-m-d H:i:s') . " - Backup started\n", FILE_APPEND);

// 这里放你的实际逻辑,比如数据库导出、文件清理等 exec('mysqldump -u root -p123456 mydb > /backup/mydb_'.date('Ymd_His').'.sql 2>&1', $output, $return_code); if ($return_code === 0) { file_put_contents('/var/log/myapp/backup.log', date('Y-m-d H:i:s') . " - Backup succeeded\n", FILE_APPEND); } else { file_put_contents('/var/log/myapp/backup.log', date('Y-m-d H:i:s') . " - Backup failed: " . implode("\n", $output) . "\n", FILE_APPEND); } ?>

然后在终端运行 crontab -e,添加一行:

立即学习PHP免费学习笔记(深入)”;

0 2 * * * /usr/bin/php /var/www/myapp/tasks/backup.php

表示每天凌晨 2 点执行。注意:/usr/bin/php 是 PHP CLI 的真实路径,用 which php 查;Web 环境的 PHP 配置(如 php.ini)和 CLI 的可能不同,扩展、内存限制、open_basedir 都要单独检查。

别在 Web 请求里“模拟”定时任务

有人用 AJAX 轮询、或者在某个页面里写 time() - filemtime('last_run') > 3600 来“凑合”,这本质是伪定时:依赖用户访问、无法保证准时、并发时可能重复执行、失败了也没日志可查。

常见错误现象包括:

  • 任务只在管理员刷后台时才跑,上线后就停摆
  • 多个用户同时访问,触发多次相同任务(比如重复发邮件)
  • set_time_limit(0) 在某些托管环境(如 shared hosting)被禁用,直接报错

需要动态控制?加一层轻量调度表 + cron 扫描

如果任务时间不固定(比如用户提交的“明天上午 10 点推送通知”),不能全靠静态 cron。这时可以建一张数据库表存待执行任务,再让 cron 每分钟跑一次扫描脚本:

CREATE TABLE scheduled_tasks (
    id INT PRIMARY KEY AUTO_INCREMENT,
    command VARCHAR(255) NOT NULL,
    run_at DATETIME NOT NULL,
    status ENUM('pending', 'running', 'done', 'failed') DEFAULT 'pending',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

扫描脚本核心逻辑:

$pdo->prepare("SELECT * FROM scheduled_tasks WHERE status = 'pending' AND run_at <= NOW() LIMIT 10")->execute();
$tasks = $pdo->fetchAll();
foreach ($tasks as $task) {
    // 标记为 running,防止被其他 cron 实例重复取走
    $pdo->prepare("UPDATE scheduled_tasks SET status = 'running' WHERE id = ? AND status = 'pending'")->execute([$task['id']]);
    // 执行 $task['command'],比如 shell_exec() 或 include()
    // 更新 status 为 done/failed
}

关键点:更新必须带 AND status = 'pending' 条件,否则并发时会冲突;每次只取少量(如 10 条),避免单次执行太久被 cron 中断。

这种模式不是替代 cron,而是用 cron 做“心跳”,真正调度逻辑由 PHP 控制——平衡了灵活性和可靠性。

真正难的从来不是写几行 sleep(),而是让任务在没人盯着的时候,该跑就跑、跑坏能知、重复不发生、资源不泄漏。cron + CLI + 日志 + 原子更新,四样缺一不可。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

233

2023.07.27

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

508

2023.08.04

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

521

2023.08.04

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

235

2024.02.23

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

385

2024.07.09

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

3584

2024.08.07

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

41

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

58

2026.01.13

抖音网页版入口与视频观看指南 抖音官网视频在线访问
抖音网页版入口与视频观看指南 抖音官网视频在线访问

本专题汇总了抖音网页版的入口链接、官方登录页面以及视频观看入口,帮助用户快速访问抖音网页版,提供免登录访问方式和直接进入视频播放页面的方法,确保顺利浏览和观看抖音视频。

22

2026.02.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 2.1万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 822人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号