在 Debian 上“守护(daemonize / 常驻)”Laravel 相关进程,常见有 队列、定时任务、WebSocket、自定义命令 等场景。下面按最推荐 → 传统方式说明。
sudo apt update
sudo apt install supervisor
sudo nano /etc/supervisor/conf.d/laravel-worker.conf
内容示例:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/laravel/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=www-data
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/laravel/storage/logs/worker.log
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
✅ 优点:
不要用 cron 直接跑 artisan 命令,而是:
crontab -e
* * * * * cd /var/www/laravel && php artisan schedule:run >> /dev/null 2>&1
app/Console/Kernel.phpprotected function schedule(Schedule $schedule)
{
$schedule->command('inspire')->hourly();
}
✅ 只守护 一个 cron 进程
[program:laravel-octane]
command=php /var/www/laravel/artisan octane:start --server=roadrunner
autostart=true
autorestart=true
user=www-data
sudo nano /etc/systemd/system/laravel-queue.service
[Unit]
Description=Laravel Queue Worker
After=network.target
[Service]
ExecStart=/usr/bin/php /var/www/laravel/artisan queue:work
Restart=always
User=www-data
[Install]
WantedBy=multi-user.target
sudo systemctl enable laravel-queue
sudo systemctl start laravel-queue
❌ nohup php artisan queue:work &
❌ screen / tmux
原因:重启丢失、无监控、无日志管理
| 场景 | 推荐方式 |
|---|---|
| 队列 | Supervisor |
| 定时任务 | cron + schedule |
| WebSocket | Supervisor |
| 高并发 | Octane + Supervisor |
| 系统级服务 | systemd |
如果你愿意,可以告诉我:
我可以直接帮你写一份完整配置。