如何在仅支持PHP文件的虚拟主机中使用Laravel Scheduler?
实现Laravel定时任务的PHP文件替代方案
因为你的服务商仅支持通过PHP文件触发定时任务,无法直接编辑crontab,你可以通过以下方式将php artisan schedule:run命令封装到PHP文件中:
方法1:使用exec()函数执行命令
创建一个名为cron-runner.php的文件,内容如下:
<?php // 切换到Laravel项目的根目录 chdir('/path-to-your-project'); // 执行schedule:run命令,同时将输出重定向到/dev/null避免产生冗余输出 exec('php artisan schedule:run >> /dev/null 2>&1'); ?>
方法2:使用shell_exec()函数执行命令
如果exec()被服务商禁用,也可以用shell_exec()实现,代码逻辑类似:
<?php chdir('/path-to-your-project'); shell_exec('php artisan schedule:run >> /dev/null 2>&1'); ?>
关键注意事项
- 替换项目路径:务必把
/path-to-your-project替换成你Laravel项目的实际根目录(比如/home/your-username/public_html/your-laravel-app) - PHP命令路径:如果主机上
php命令不是全局可访问的,需要使用绝对路径。你可以通过SSH执行which php获取路径,然后把代码里的php替换成绝对路径(比如/usr/local/bin/php) - 函数权限检查:部分服务商可能禁用
exec/shell_exec函数,你可以先创建一个测试文件验证:
访问这个测试文件,如果能输出当前用户,说明函数可用<?php echo shell_exec('whoami'); ?> - 定时任务频率:在服务商管理界面设置这个PHP文件每分钟执行一次,和原crontab的
* * * * *频率保持一致
内容的提问来源于stack exchange,提问作者JanBoehmer
相关产品推荐
相关产品推荐

