Menjalankan Laravel Queue sebagai Service Background dengan systemd
Dalam pengembangan aplikasi Laravel, menjalankan queue worker secara manual menggunakan perintah php artisan queue:work di terminal tidaklah cukup untuk lingkungan produksi (production). Jika terminal ditutup atau server restart, proses queue akan mati.
Cara paling stabil dan standar di Linux untuk memastikan antrean (queue) tetap berjalan adalah dengan menggunakan systemd.
Mengapa Menggunakan systemd?
- Auto-Restart: Jika proses queue error atau crash, systemd akan otomatis menjalankannya kembali.
- Mulai Otomatis: Queue akan otomatis berjalan saat server melakukan booting.
- Manajemen Mudah: Anda bisa memantau status, menghentikan, atau memulai ulang layanan dengan satu perintah singkat.
Langkah-langkah Konfigurasi
1. Membuat File Service
Buka terminal server Anda dan buat file konfigurasi baru di direktori systemd:
sudo nano /etc/systemd/system/laravel-worker.service2. Menyusun Konfigurasi
Tempelkan konfigurasi berikut ke dalam file tersebut. Sesuaikan bagian yang ditebalkan dengan kondisi server Anda:
[Unit]
Description=Laravel Queue Worker - My Application
After=network.target mysql.service redis.service
[Service]
# Sesuaikan User & Group (biasanya www-data atau username Anda)
User=www-data
Group=www-data
Restart=always
RestartSec=5
# Sesuaikan dengan lokasi folder project Laravel Anda
WorkingDirectory=/var/www/my-project
# Sesuaikan path PHP dan path artisan
ExecStart=/usr/bin/php /var/www/my-project/artisan queue:work --backoff=3 --tries=3 --timeout=90
[Install]
WantedBy=multi-user.targetCatatan: Jika Anda menggunakan Laravel Horizon, ganti perintah
queue:workpadaExecStartmenjadihorizon.
3. Mendaftarkan dan Menjalankan Service
Setelah file disimpan, lakukan langkah-langkah berikut untuk mengaktifkannya:
- Muat ulang daemon agar systemd mengenali file baru:
sudo systemctl daemon-reload- Aktifkan service agar berjalan otomatis saat server nyala:
sudo systemctl enable laravel-worker.service- Jalankan service sekarang juga:
sudo systemctl start laravel-worker.servicePerintah Manajemen yang Penting
Gunakan perintah di bawah ini untuk mengelola queue worker Anda:
| Perintah | Fungsi |
|---|---|
sudo systemctl status laravel-worker | Mengecek apakah worker sedang berjalan/error. |
sudo systemctl restart laravel-worker | Memuat ulang worker (Wajib setelah Anda update code). |
sudo systemctl stop laravel-worker | Menghentikan semua proses antrean. |
journalctl -u laravel-worker -f | Melihat log aktivitas worker secara real-time. |
Tips Tambahan: Update Kode
Perlu diingat bahwa queue:work adalah proses yang berjalan secara long-lived (menyimpan data di memori). Setiap kali Anda melakukan perubahan pada kode program (misalnya setelah git pull), Anda harus menjalankan perintah:
sudo systemctl restart laravel-workerAtau jika menggunakan perintah Laravel:
php artisan queue:restartDengan konfigurasi ini, sistem antrean aplikasi Laravel Anda akan jauh lebih tangguh dan dapat diandalkan di server produksi.
Untuk menonaktifkan dan menghapus layanan (service) di systemd secara permanen, Anda perlu mengikuti urutan langkah yang benar agar tidak ada sisa proses yang tertinggal atau konfigurasi yang "gentayangan".
Berikut adalah langkah-langkahnya:
1. Hentikan Layanan yang Sedang Berjalan
Langkah pertama adalah memastikan proses layanan tersebut benar-benar mati.
sudo systemctl stop nama-service.service2. Nonaktifkan Autostart (Disable)
Ini akan menghapus symbolic link yang membuat layanan berjalan otomatis saat server booting.
sudo systemctl disable nama-service.service3. Hapus File Unit Service
Anda harus menghapus file konfigurasi asli yang biasanya terletak di salah satu direktori berikut:
/etc/systemd/system/(Paling umum untuk layanan kustom)/lib/systemd/system/(Biasanya untuk paket aplikasi resmi)
Gunakan perintah rm untuk menghapusnya:
sudo rm /etc/systemd/system/nama-service.service4. Reload Daemon Systemd
Setelah file dihapus, sistem masih menyimpan konfigurasi lama di memori. Anda harus memaksa systemd untuk memindai ulang struktur direktorinya.
sudo systemctl daemon-reload5. Bersihkan Sisa Konfigurasi (Opsional)
Jika layanan tersebut memiliki dependensi yang gagal dibersihkan, jalankan perintah ini:
sudo systemctl reset-failedCara Verifikasi
Untuk memastikan layanan tersebut sudah benar-benar hilang dari sistem, jalankan:
systemctl list-unit-files | grep nama-serviceJika tidak ada output yang muncul, berarti layanan telah berhasil dihapus sepenuhnya.
Ringkasan Perintah dalam Satu Baris
Jika Anda yakin dengan nama layanannya, Anda bisa menggabungkannya:
sudo systemctl stop nama-service && sudo systemctl disable nama-service && sudo rm /etc/systemd/system/nama-service.service && sudo systemctl daemon-reload && sudo systemctl reset-failedHati-hati: Menghapus file di
/etc/systemd/system/tidak dapat dibatalkan (undo). Pastikan Anda memiliki cadangan jika layanan tersebut penting.