Skip to content

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.

bash
sudo nano /etc/systemd/system/laravel-worker@.service

2. 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.

ini
[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.target

3. 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:
bash
sudo systemctl start laravel-worker@1
sudo systemctl start laravel-worker@2
  • Mengaktifkan agar otomatis jalan saat boot (Instance 1 sampai 5):
bash
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:

bash
systemctl status "laravel-worker@*"

Restart Semua Worker

Sangat berguna setelah Anda melakukan update kode (deployment):

bash
sudo systemctl restart "laravel-worker@*"

Mematikan Salah Satu Worker

Jika beban kerja menurun dan Anda ingin menghemat RAM:

bash
sudo systemctl stop laravel-worker@5

Keuntungan Metode Template

  1. Efisiensi File: Cukup satu file untuk mengelola puluhan worker.
  2. Skalabilitas: Menambah worker baru semudah menjalankan perintah start dengan nomor baru.
  3. Isolasi: Jika laravel-worker@1 error, instance lainnya (2, 3, dst) akan tetap berjalan normal.