PHP网站需借助Linux的Crontab实现定时任务,核心是用crontab定期调用独立运行的PHP CLI脚本,脚本须用绝对路径、加Shebang、设执行权限,并在crontab中指定PHP完整路径及日志重定向。

PHP网站本身不带定时调度能力,必须靠Linux系统级工具Crontab来驱动自动化执行。核心就一点:用crontab定期调用PHP CLI脚本,所有逻辑封装在脚本里,系统只管按时“敲门”。
写一个能被Crontab直接跑的PHP脚本
脚本要脱离Web环境独立运行,不能依赖$_SERVER、$_GET或session。重点注意三件事:
- 所有文件路径必须写绝对路径,比如
require '/var/www/myapp/config/database.php';,别用./config.php或../config.php - 开头加Shebang(可选但推荐):
#!/usr/bin/env php,这是告诉系统“用php解释器跑我” - 给脚本加执行权限:
chmod +x /var/www/myapp/cron/backup.php
用crontab添加任务规则
执行crontab -e编辑当前用户任务表,一行一条规则。格式是:分 时 日 月 周 命令。关键细节:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 务必用
which php查清PHP解释器真实路径,例如/usr/bin/php,不要直接写php - 命令部分建议写成:
/usr/bin/php /var/www/myapp/cron/backup.php - 如果脚本需要在项目根目录下运行(比如依赖
vendor/autoload.php),改成:cd /var/www/myapp && /usr/bin/php think cron:run - 示例:每天凌晨2点执行备份:
0 2 * * * /usr/bin/php /var/www/myapp/cron/backup.php
必须加日志重定向,否则失败你根本不知道
Crontab默认把输出发邮件,但多数服务器没配邮件服务,结果就是静默失败。正确做法是把标准输出和错误都写进日志文件:
立即学习“PHP免费学习笔记(深入)”;
- 追加到日志:
> /var/log/backup.log 2>&1 - 完整示例:
0 2 * * * /usr/bin/php /var/www/myapp/cron/backup.php >> /var/log/backup.log 2>&1 - 日志文件所在目录要确保PHP进程有写权限,比如
chown www-data:www-data /var/log/backup.log
常见踩坑点和验证方法
配置完别急着等明天,立刻动手验证是否真能跑通:
- 手动执行一次:
/usr/bin/php /var/www/myapp/cron/backup.php,看有没有报错、日志有没有写入 - 检查crontab是否生效:
crontab -l,确认刚加的那行还在 - 查看系统cron日志(Ubuntu/Debian):
sudo tail -f /var/log/syslog | grep CRON,看有没有执行记录 - 权限问题最常见:确保
runtime/目录(ThinkPHP)或cache/目录可写,否则脚本中途退出无提示


















