如何让Laravel的artisan命令在Ubuntu服务器关闭终端后仍后台运行?
方案1:nohup 临时后台运行(快速实现,无需额外配置)
nohup 命令可以忽略SSH终端的挂断信号,关闭Putty后进程仍会持续运行,执行以下命令即可:
nohup php artisan schedule:work > ~/scheduler.log 2>&1 &
参数说明:
> ~/scheduler.log是将命令运行日志输出到当前用户主目录的scheduler.log文件,方便后续排查问题,不需要日志可以替换为> /dev/null2>&1代表将错误输出也重定向到和标准输出相同的位置- 末尾的
&代表将进程放到后台运行
运行后可以通过ps aux | grep "php artisan schedule:work"确认进程是否正常启动,需要停止时找到对应进程ID执行kill 进程ID即可。
方案2:systemd 系统服务配置(生产环境推荐,支持开机自启、异常自动重启)
该方案稳定性最高,适合正式线上环境使用,操作步骤如下:
- 新建服务配置文件:
sudo nano /etc/systemd/system/laravel-scheduler.service - 粘贴以下配置内容,需根据实际情况替换
User、Group、WorkingDirectory、php执行路径为你服务器的对应值:
[Unit] Description=Laravel 调度任务工作进程 After=network.target [Service] User=www-data Group=www-data WorkingDirectory=/var/www/你的Laravel项目根目录 ExecStart=/usr/bin/php artisan schedule:work Restart=always RestartSec=3 [Install] WantedBy=multi-user.target
- 保存退出后重载systemd配置:
sudo systemctl daemon-reload - 启动服务:
sudo systemctl start laravel-scheduler - 设置开机自动启动:
sudo systemctl enable laravel-scheduler
如需查看服务运行状态,执行sudo systemctl status laravel-scheduler即可,查看实时运行日志执行sudo journalctl -u laravel-scheduler -f。
方案3:screen 会话托管(需要保留终端交互场景适用)
如果你需要随时可以切回命令运行终端查看实时输出,可以使用screen工具:
- 安装screen:
sudo apt update && sudo apt install screen -y - 新建名为scheduler的会话:
screen -S scheduler - 进入会话后正常执行命令:
php artisan schedule:work - 按
Ctrl + A + D组合键即可退出会话且不终止进程,关闭Putty也不会影响运行 - 需要回到会话查看时,执行
screen -r scheduler即可
注意:如果你的服务器上同时运行了队列消费任务,也可以参考同样的逻辑配置后台运行。
内容的提问来源于stack exchange,提问作者Anorbert
相关产品推荐
相关产品推荐

