在 LNMP(Linux + Nginx + MySQL + PHP) 环境下,一般不使用 Nginx 来做定时任务,而是由 Linux 系统层 提供定时任务机制。最常见、最标准的做法是使用 crontab。
下面按常见场景给你一个完整说明。
crontab -l
crontab -e
如果是第一次使用,可能会让你选择编辑器,推荐选 nano 或 vim。
* * * * * 命令
分 时 日 月 周
| 字段 | 含义 |
|---|---|
| 分 | 0–59 |
| 时 | 0–23 |
| 日 | 1–31 |
| 月 | 1–12 |
| 周 | 0–7(0和7都是周日) |
0 2 * * * /usr/bin/php /home/wwwroot/your_project/cron.php
查看 php 路径:
which php
0 2 * * * curl https://example.com/cron.php
或
0 2 * * * wget -q https://example.com/cron.php
⚠️ 注意
0 2 * * *
*/5 * * * *
0 * * * *
| 方式 | 是否推荐 |
|---|---|
| PHP CLI | ✅ 强烈推荐 |
| PHP-FPM(curl) | ⚠️ 不推荐 |
原因:
执行用户一般是 当前登录用户
如果 PHP 需要写文件:
chown -R www:www /home/wwwroot/your_project
或指定用户执行:
sudo crontab -u www -e
❌ 错误:
php artisan schedule:run
✅ 正确:
/usr/bin/php /home/wwwroot/project/artisan schedule:run
* * * * * /usr/bin/php /home/wwwroot/laravel/artisan schedule:run >> /dev/null 2>&1
0 1 * * * /usr/bin/php /home/wwwroot/tp/think cron
tail -f /var/log/cron
php /home/wwwroot/your_project/cron.php
✅ 推荐方案
crontabPHP CLI✅ 示例模板
0 2 * * * /usr/bin/php /home/wwwroot/site/cron.php >> /home/wwwroot/site/cron.log 2>&1
如果你愿意,可以告诉我:
我可以帮你写 完全可用的 crontab 配置。