php实现定时任务
PHP 实现定时任务的方法
使用 Cron Job
Cron 是 Linux 系统自带的定时任务工具,可以通过配置定时执行 PHP 脚本。编辑 crontab 文件(crontab -e),添加如下格式的任务:
* * * * * /usr/bin/php /path/to/your/script.php
五个星号分别代表分钟、小时、日、月、星期,可根据需求调整。例如,每天凌晨 1 点执行:
0 1 * * * /usr/bin/php /path/to/your/script.php
使用无限循环脚本
通过编写一个无限循环的 PHP 脚本,结合 sleep() 函数实现定时任务。示例代码:
<?php
while (true) {
// 执行任务逻辑
echo "Task executed at " . date('Y-m-d H:i:s') . "\n";
sleep(60); // 休眠 60 秒
}
此方法需通过命令行启动(php script.php),适合简单任务,但需注意脚本异常退出问题。
使用第三方库(如 Laravel 任务调度)
Laravel 框架提供了内置的任务调度功能。在 app/Console/Kernel.php 中定义任务:
protected function schedule(Schedule $schedule) {
$schedule->call(function () {
// 任务逻辑
})->daily();
}
通过服务器 Cron 调用 Laravel 调度器(需添加以下 Cron 条目):
* * * * * cd /path/to/laravel && php artisan schedule:run >> /dev/null 2>&1
使用数据库或文件锁避免重复执行
在脚本开头检查锁文件或数据库标记,防止重复执行:
$lockFile = '/tmp/task.lock';
if (file_exists($lockFile)) {
exit("Task is already running.\n");
}
file_put_contents($lockFile, getmypid());
// 任务逻辑
unlink($lockFile);
注意事项
- 确保 PHP 命令行路径正确(可通过
which php查看)。 - 日志记录任务执行情况,便于排查问题。
- 长时间运行脚本需处理内存泄漏问题(如定期重启脚本)。







