在 Debian 上“守护 Laravel 进程”常见有几种场景,下面按最常见用法给你讲清楚,并给出可落地的方案。
先确认你指的是哪一种:
php artisan queue:work
php artisan serve
# 或
php artisan octane:start
php artisan your:command
下面以 queue:work 为例,其他同理。
sudo nano /etc/systemd/system/laravel-queue.service
示例内容(⚠️按你路径修改):
[Unit]
Description=Laravel Queue Worker
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/laravel
ExecStart=/usr/bin/php artisan queue:work --queue=default --sleep=3 --tries=3
Restart=always
RestartSec=5
Environment=APP_ENV=production
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable laravel-queue
sudo systemctl start laravel-queue
systemctl status laravel-queue
journalctl -u laravel-queue -f
✅ 优点
sudo apt install supervisor
sudo nano /etc/supervisor/conf.d/laravel-queue.conf
[program:laravel-queue]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/laravel/artisan queue:work --queue=default
autostart=true
autorestart=true
user=www-data
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/laravel/storage/logs/queue.log
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-queue:*
nohup php artisan queue:work > queue.log 2>&1 &
问题:
如果是 Octane:
ExecStart=/usr/bin/php artisan octane:start --server=swoole --host=0.0.0.0 --port=8000
方式完全一样(systemd)。
✅ PHP 路径要用绝对路径
✅ 用户要有 storage 写权限
✅ .env 环境变量要在 service 里指定
✅ 队列卡死 → 用 queue:restart
| 场景 | 推荐 |
|---|---|
| Debian 生产 | ✅ systemd |
| 多进程管理 | ✅ supervisor |
| 临时测试 | nohup |
如果你愿意,可以告诉我:
我可以直接帮你写 完整配置文件。