温馨提示×

ubuntu php怎样写定时任务

小樊
50
2026-10-13 04:11:47
栏目: 编程语言

在 Ubuntu 上用 PHP 写“定时任务”,通常有两种常见方式:

  1. 用 Linux 自带的 cron(最常用)
  2. 用 PHP 自己写的定时调度(如 Workerman / Swoole / 死循环)

下面重点讲最常用、最推荐的 cron 方式。


一、使用 cron 执行 PHP 定时任务(推荐)

1️⃣ 准备 PHP 脚本

例如:/var/www/php/cron.php

<?php
// cron.php
file_put_contents(
    '/var/www/php/cron.log',
    date('Y-m-d H:i:s') . " 定时任务执行\n",
    FILE_APPEND
);

确保 PHP 可执行:

php -v

2️⃣ 编辑 crontab

crontab -e

如果是第一次用,会让你选编辑器,推荐 nano 或 vim


3️⃣ 添加定时任务

格式:

* * * * * 命令

示例:

✅ 每分钟执行一次

* * * * * /usr/bin/php /var/www/php/cron.php

✅ 每天凌晨 2 点执行

0 2 * * * /usr/bin/php /var/www/php/cron.php

✅ 每 5 分钟执行

*/5 * * * * /usr/bin/php /var/www/php/cron.php

⚠️ 注意:

  • 用 which php 查 PHP 路径
which php

4️⃣ 查看 / 删除任务

crontab -l      # 查看
crontab -r      # 删除全部

5️⃣ 错误排查

查看 cron 日志:

sudo tail -f /var/log/syslog | grep CRON

确保:

  • PHP 文件路径正确
  • 文件有执行权限
  • 日志文件可写

二、使用 systemd timer(更现代,可选)

适合长期服务,比 cron 更强大。


三、PHP 自身定时(不推荐服务器用)

例如:

while (true) {
    // 执行任务
    sleep(60);
}

⚠️ 缺点:

  • 占用进程
  • 容易挂
  • 不适合 Web 服务器

四、常见场景示例

✅ 清理日志

<?php
array_map('unlink', glob('/var/log/myapp/*.log'));

✅ 数据库定时任务

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$pdo->exec("DELETE FROM logs WHERE created_at < NOW() - INTERVAL 7 DAY");

五、总结(推荐做法)

✅ Ubuntu + PHP 定时任务 = cron + php cli ✅ 不用 web 访问 ✅ 稳定、简单、可控

如果你愿意,可以告诉我:

  • PHP 版本
  • 是否是 Laravel / ThinkPHP
  • 想做哪种定时任务(发邮件 / 清理数据 / 爬虫)

我可以直接帮你写完整示例。

0 踩