Membuat Daemon di Linux dengan Supervisor

Wahid Prima Cahyanto
SkyshiDigital
Published in
4 min readMar 2, 2017

Pada kesempatan kali ini saya akan berbagi ilmu tentang bagaimana installing dan managing program Supervisor untuk UNIX-like Operating System khususnya Ubuntu dan Debian.

Namun sebelum membicarakan tentang bagaimana cara installation dan management Supervisor, terlebih dahulu mari kita mengenal apa itu sebenarnya Supervisor?

Supervisor adalah sebuah package process manager untuk sistem client/server yang memungkinkan kita lebih mudah dalam memonitor dan mengontrol sejumlah proses program yang kita buat pada sistem operasi UNIX-like. Supervisor juga menyediakan interface yang konsisten sehingga benar-benar memudahkan dalam monitoring dan controlling program kita. Secara garis besarnya sesuai dengan namanya yaitu Supervisor atau Pengawas. hehehe~

Kita ambil contoh kasus dalam kebanyakan VPS environments, seringkali kita memiliki beberapa program yang ingin kita jalankan terus menerus seperti shell script, aplikasi Node.js, atau sesuatu packages berukuran besar lainnya.
Secara konvensional hal tersebut dapat kita lakukan dengan cara menulis script init untuk masing-masing program, namun akan membutuhkan waktu dalam mengelolanya terlebih lagi tidak begitu transparan bagi pengguna baru. Oleh karena itu program Supervisor ini sangat membantu kita untuk menangani task tersebut.

Baiklah dirasa cukup untuk bagian perkenalannya ya…
Sekarang kita masuk pada bagian mempersiapkan Supervisor. Disini saya mengasumsikan bahwa teman-teman pembaca sudah familiar dengan syntax command line juga installing packages.

Installation

Untuk cara install Supervisor pada Ubuntu dan Debian sangat mudah dan sederhana.

Sebagai root, jalankan perintah berikut untuk menginstal package Supervisor :

apt-get install supervisor

Setelah proses install selesai, program daemon dari Supervisor langsung
otomatis berjalan sebagai prebuilt package yang mengandung init script didalamnya, tujuannya untuk memastikan Supervisor akan keepalive dan juga autostart apabila server mengalami reboot sistem.
Lakukan restart servis Supervisor untuk memastikan bahwa apakah servis telah berjalan. Caranya dengan syntag command berikut :

service supervisor restart

Apabila kita mendapatkan status supervisord dari hasil restart service supervisor tersebut berarti program supervisor kita telah berhasil terpasang dan berjalan dengan baik.

Adding a Program

Untuk menambahkan program baru kedalam Supervisor hal yang perlu kita lakukan adalah mendeklarasikan beberapa informasi kedalam file konfigurasi Supervisor. meliput informasi command untuk menjalankan program, variable yang dibutuhkan, dan bagaimana outputnya harus ditangani.

Sehingga secara praktis program yang ingin kita tambahkan dalam Supervisor juga memiliki dasar dasar konfigurasi diatas, Ada command untuk menjalankan program, output program, dan juga output jika terjadi error. Jika tidak memenuhi dasar konfigurasi diatas maka nantinya Supervisor tidak dapat memberikan respon pada program tersebut.

Sekarang langsung saja masuk ke dalam contoh kasus. Sebagai contoh kita membuat script shell sederhana dibawahi ini, dimana kita ingin program ini dijalankan keep alive dan auto start ketika server mengalami reboot system.

#!/bin/bashwhile true
do

# code dibawah ini akan di simpan pada log stdout
echo `date`
# code error di bawah ini akan di simpan pada log stderr
echo 'error!' >&2

sleep 1
done

Kita juga harus setting hak akses agar program diatas dapat di execute oleh package Supervisor

chmod +x /usr/local/bin/date.sh

Kita asumsikan bahwa program diatas telah disimpan dengan nama date.sh pada lokasi /usr/local/bin

/usr/local/bin/date.sh

Setelah semua persiapan sudah siap mulai dari Installation Supervisor, memastikan package Supervisor sudah berjalan, dan juga memiliki Program yang ingin kita masukkan kedalam Supervisor. Maka selanjutnya kita akan mengaplikasikan program tersebut ke dalam Supervisor.

File program konfigurasi untuk Supervisor berada di lokasi:

/etc/supervisor/conf.d/

Pada umumnya satu file konfigurasi digunakan untuk satu program dan disimpan dengan ekstensi conf.
Maka untuk contoh kasus kita ini, file konfigurasi Supervisor kita disimpan dengan nama dan lokasi terlihat seperti berikut:

/etc/supervisor/conf.d/date_script.conf

Dengan isi konfigurasi seperti berikut ini

[program:date_script]
command=/usr/local/bin/date.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/date.err.log
stdout_logfile=/var/log/date.out.log

Mari kita bedah terlebih dahulu pentingnya setiap baris konfigurasi diatas

[program:date_script]
command=/usr/local/bin/date.sh

Konfigurasi dimulai dengan mendefinisikan nama program ‘date_script’ di ikuti dengan command untuk menjalankan program dengan path yang lengkap.

autostart=true
autorestart=true

Dua baris berikutnya mendefinisikan automatic behaviour dari program.

autostart memberi perintah kepada Supervisor bahwa program ini harus dimulai saat server booting.
autorestart memberikan perintah kepada Supervisor apa yang perlu dilakukan pada program ini pada saat event exit. terdapat 3 pilihan penanganan pada autorestart:

  • ‘false’ memberi perintah pada Supervisor bahwa kita tidak ingin program di restart setelah exit
  • ‘true’ memberi perintah pada Supervisor bahwa kita ingin program agar selalu di restart setelah exit
  • ‘unexpected’ memberi perintah pada Supervisor bahwa restart program apa bila terjadi error
stderr_logfile=/var/log/date.err.log
stdout_logfile=/var/log/date.out.log

Untuk dua baris terakhir menentukan lokasi dari dua file yang bertugas untuk menyimpan log utama dari program.

Seperti yang terlihat dari namanya, log output dan log error masing-masing
akan diarahkan ke path stdout_logfile dan stderr_logfile. Namun hal yang perlu kita perhatikan directori path yang kita gunakan harus benar-benar tersedia terlebih dahulu, karena Supervisor tidak akan berusaha membuat missing directories.

File Konfigurasi yang telah kita buat disini merupakan template standart minimal untuk package Supervisor. Namun jika teman-teman pembaca ingin tahu konfigurasi yang lebih kompleks pada Supervisor dapat dibaca pada documentation berikut.

Setelah file konfigurasi tersedia dan tersimpan, kita telah memberikan informasi pada Supervisor tentang apa yang harus dilakukan terhadap program kita.

Namun untuk lebih baiknya kita lakukan pengecekan terhadap file konfigurasi yang telah kita buat pada /etc/supervisor/conf.d
dengan menjalankan command:

supervisorctl reread

Setelah Supervisor memberikan informasi terdapat file konfigurasi baru, atau menemukan perubahan pada file konfigurasi, kita harus memberikan perintah command update pada konfigurasi tersebut

supervisorctl update

Setiap kali kita membuat perubahan pada file konfigurasi ataupun membuat file konfigurasi yang baru, kita harus menjalankan 2 command diatas.
Atau minimal menjalankan command supervisorctl update.

Sampai pada titik ini, program kita sekarang harusnya telah berjalan. Untuk memeriksanya dapat kita lihat dengan mengakses file log output:

$ tail /var/log/date.out.logWed Mar 1 22:21:22 UTC+7 2017
Wed Mar 1 22:21:23 UTC+7 2017
Wed Mar 1 22:21:24 UTC+7 2017
Wed Mar 1 22:21:25 UTC+7 2017
Wed Mar 1 22:21:26 UTC+7 2017
Wed Mar 1 22:21:27 UTC+7 2017
Wed Mar 1 22:21:28 UTC+7 2017
Wed Mar 1 22:21:29 UTC+7 2017
Wed Mar 1 22:21:30 UTC+7 2017
Wed Mar 1 22:21:31 UTC+7 2017

Success!

“You live and learn. At any rate, you live.” ~ Douglas Adams

--

--

Wahid Prima Cahyanto
SkyshiDigital

Backend at Skyshi Digital Indonesia | eat, pray, code, repeat;