温馨提示×

PHP在Ubuntu如何写定时

小樊
54
2026-08-24 10:42:00
栏目: 编程语言

在 Ubuntu 上给 PHP 写“定时任务”,最常用、最标准的做法是用 crontab。下面按“从入门到常用场景”给你讲清楚。


一、最基本方式:用 crontab 定时执行 PHP

1️⃣ 准备一个 PHP 脚本

例如:

<?php
// /var/www/html/cron/test.php
file_put_contents('/tmp/cron_test.log', date('Y-m-d H:i:s') . PHP_EOL, FILE_APPEND);

2️⃣ 确认 PHP 可执行路径

which php

常见结果:

/usr/bin/php

3️⃣ 编辑当前用户的 crontab

crontab -e

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


4️⃣ 添加定时任务

例如:每分钟执行一次

* * * * * /usr/bin/php /var/www/html/cron/test.php >> /tmp/php_cron.log 2>&1

✅ 说明:

  • * * * * *:每分钟
  • /usr/bin/php:PHP 可执行文件
  • >> /tmp/php_cron.log 2>&1:记录输出和错误

5️⃣ 查看是否生效

cat /tmp/cron_test.log

二、常用时间示例(重点)

需求 Crontab
每分钟 * * * * *
每 5 分钟 */5 * * * *
每小时 0 * * * *
每天凌晨 2 点 0 2 * * *
每周一凌晨 3 点 0 3 * * 1
每月 1 号 0 0 1 * *

三、用 root 用户执行(推荐用于生产)

sudo crontab -e

适合:

  • 需要写系统目录
  • 需要更高权限
  • 服务器常驻任务

四、PHP 在 Web 项目中的常见用法(重要)

✅ 推荐:CLI 方式(你现在用的)

php artisan schedule:run
php think schedule
php your_script.php

❌ 不推荐:curl 访问 URL

curl http://localhost/cron.php

原因:

  • 受 Web 服务影响
  • 不安全
  • 容易被外部访问

五、Laravel / ThinkPHP 等框架的定时方式

✅ Laravel(最标准)

1. 在 crontab 只写一行

* * * * * cd /var/www && php artisan schedule:run >> /dev/null 2>&1

2. 在 app/Console/Kernel.php 里定义时间

protected function schedule(Schedule $schedule)
{
    $schedule->command('demo:task')->daily();
}

六、调试 crontab 的常见坑

❌ 1. PHP 路径不对

用:

which php

不要用相对路径。


❌ 2. 没有执行权限

chmod +x /var/www/html/cron/test.php

❌ 3. 环境变量问题(常见)

cron 的 PATH 和你的 shell 不一样。

✅ 解决:

  • 用绝对路径
  • 或在脚本开头:
<?php
putenv('PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin');

❌ 4. 看 cron 日志(Ubuntu 20+)

grep CRON /var/log/syslog

七、如果你用的是 systemd(进阶)

适合:

  • 秒级任务
  • 长期运行 PHP 脚本

我可以单独给你讲 systemd timer vs crontab 的区别


八、总结一句话 ✅

Ubuntu 上 PHP 定时任务 = crontab + php cli

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

  • ✅ 是否用 Laravel / ThinkPHP
  • ✅ 是服务器还是本地
  • ✅ 多久执行一次

我可以直接帮你写 可用配置

0