Mengelola Multi-Worker Laravel Queue dengan Systemd Template
Ketika traffic aplikasi Anda meningkat, satu proses queue worker seringkali tidak cukup untuk menangani ribuan job secara cepat. Anda membutuhkan banyak worker yang berjalan secara paralel.
Daripada membuat banyak file .service secara manual, Linux memiliki fitur efisien bernama Systemd Templates.
Apa itu Systemd Template?
Systemd Template memungkinkan Anda mendefinisikan satu file konfigurasi "induk" yang bisa digunakan untuk menjalankan banyak proses (instance) sekaligus dengan parameter yang berbeda (misalnya: worker 1, worker 2, dst).
Langkah-langkah Konfigurasi Multi-Worker
1. Membuat File Service Template
Buat file service dengan simbol @ sebelum ekstensi .service. Simbol ini menandakan bahwa file ini adalah sebuah template.
sudo nano /etc/systemd/system/laravel-worker@.service2. Isi Konfigurasi Template
Gunakan variabel %i di dalam file. %i akan otomatis berubah menjadi nomor urut atau nama instance yang Anda tentukan saat menjalankan perintah.
[Unit]
Description=Laravel Queue Worker Instance %i
After=network.target mysql.service redis.service
[Service]
User=www-data
Group=www-data
Restart=always
RestartSec=5
WorkingDirectory=/var/www/my-project
# Perhatikan penggunaan %i di bawah ini
ExecStart=/usr/bin/php /var/www/my-project/artisan queue:work --backoff=3 --tries=3 --name=worker-%i
[Install]
WantedBy=multi-user.target3. Menjalankan Beberapa Worker Sekaligus
Setelah file disimpan, Anda bisa menjalankan beberapa instance hanya dengan menyebutkan nomor setelah tanda @.
- Menjalankan instance ke-1 dan ke-2:
sudo systemctl start laravel-worker@1
sudo systemctl start laravel-worker@2- Mengaktifkan agar otomatis jalan saat boot (Instance 1 sampai 5):
sudo systemctl enable laravel-worker@{1..5}Manajemen dan Monitoring
Dengan sistem template, Anda tetap memiliki kendali penuh atas setiap instance atau semuanya sekaligus.
Cek Status Semua Worker
Anda bisa menggunakan wildcard untuk melihat status semua worker yang sedang berjalan:
systemctl status "laravel-worker@*"Restart Semua Worker
Sangat berguna setelah Anda melakukan update kode (deployment):
sudo systemctl restart "laravel-worker@*"Mematikan Salah Satu Worker
Jika beban kerja menurun dan Anda ingin menghemat RAM:
sudo systemctl stop laravel-worker@5Keuntungan Metode Template
- Efisiensi File: Cukup satu file untuk mengelola puluhan worker.
- Skalabilitas: Menambah worker baru semudah menjalankan perintah
startdengan nomor baru. - Isolasi: Jika
laravel-worker@1error, instance lainnya (2, 3, dst) akan tetap berjalan normal.