在 Ubuntu 上用 PHP 写“定时任务”,通常有两种常见方式:
下面重点讲最常用、最推荐的 cron 方式。
例如:/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
crontab -e
如果是第一次用,会让你选编辑器,推荐 nano 或 vim
格式:
* * * * * 命令
示例:
✅ 每分钟执行一次
* * * * * /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
crontab -l # 查看
crontab -r # 删除全部
查看 cron 日志:
sudo tail -f /var/log/syslog | grep CRON
确保:
适合长期服务,比 cron 更强大。
例如:
while (true) {
// 执行任务
sleep(60);
}
⚠️ 缺点:
✅ 清理日志
<?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 访问 ✅ 稳定、简单、可控
如果你愿意,可以告诉我:
我可以直接帮你写完整示例。