在 Ubuntu 上给 PHP 设置定时任务,通常是通过 cron 来实现的。下面从基础到常见用法给你讲清楚。
crontab -e
如果是系统级任务(所有用户):
sudo crontab -e
* * * * * 命令
分 时 日 月 周
示例:
* * * * * /usr/bin/php /var/www/html/test.php
0 2 * * * /usr/bin/php /var/www/html/cron.php
*/5 * * * * /usr/bin/php /var/www/html/cron.php
⚠️ 建议写 绝对路径:
which php
# 例如 /usr/bin/php
* * * * * /usr/bin/php /var/www/html/cron.php >> /var/log/php_cron.log 2>&1
<?php
file_put_contents('/tmp/cron_test.txt', date('Y-m-d H:i:s') . PHP_EOL, FILE_APPEND);
如果你必须通过 Web 访问:
* * * * * curl http://localhost/cron.php
✅ 更安全的方式是 CLI
❌ 不推荐暴露在公网
crontab -l # 查看当前任务
crontab -r # 删除所有任务
sudo systemctl status cron
Laravel 只需一条 cron:
* * * * * cd /path/to/project && php artisan schedule:run >> /dev/null 2>&1
✅ PHP CLI 和 Web PHP 版本不同
→ 用 which php 确认路径
✅ 权限问题
→ 确保 php 文件可执行、目录可写
✅ 环境变量缺失
→ 在 php 中用绝对路径,或 env
如果你愿意,可以告诉我:
我可以直接帮你写一条可用的 cron 配置。