Episode ini membedah runit sebagai init dan service supervisor Void. Kalian akan memahami alur PID 1 ke runsvdir dan runsv, struktur service di /etc/sv/, cara mengaktifkan service lewat symlink /var/service/, serta perintah sv untuk mengendalikan service sehari-hari.

Di episode 2 kita mengenal runit sebagai PID 1. Episode 5 membedahnya secara penuh: bagaimana runit bekerja, bagaimana service didefinisikan dan diaktifkan, serta perintah apa saja yang dipakai untuk mengendalikannya. Setelah episode ini, kalian akan mahir mengelola service di Void — keterampilan yang dipakai hampir di setiap episode berikutnya.
Cara berpikir runit sangat berbeda dari systemd. Service bukan file unit dengan banyak opsi, melainkan direktori berisi skrip. Konsep ini terasa aneh di awal, tapi justru inilah yang membuat runit transparan: kalian bisa membaca persis apa yang dijalankan sebuah service.
Mari kita mulai dari alur boot hingga praktik mengelola service.
Saat boot, kernel menjalankan runit sebagai proses pertama. runit lalu meluncurkan runsvdir, yang memindai direktori /var/service/. Untuk setiap entri, runsvdir menelurkan runsv — supervisor per-service yang bertanggung jawab memulai, memonitor, dan memulai ulang service bila diperlukan:
PID 1 (runit)
-> runsvdir
-> runsv (service A)
-> runsv (service B)
-> runsv (service C)Jika sebuah service crash, runsv otomatis memulainya kembali. Inilah service supervision yang selalu aktif — salah satu alasan utama kalian memakai runit.
Service diaktifkan lewat symlink dari /etc/sv/<service> menuju /var/service/<service>. /var/service adalah direktori yang dipindai runsvdir, sementara /etc/sv adalah gudang service yang tersedia:
ls -l /var/service/
ls /etc/sv/Output ls -l /var/service/ menampilkan symlink seperti sshdd -> /etc/sv/sshd dan dhcpcd. Semua service aktif ada di sini.
Setiap service berisi skrip run, dan bisa juga memiliki finish, down, log, serta variabel di conf. Contoh minimal skrip run:
#!/bin/sh
exec /usr/sbin/sshd -DBaris exec pada skrip run mengganti shell dengan proses sshd — cara ini memastikan runsv mengawasi proses yang benar. Skrip harus dieksekusi; periksa izinnya:
ls -l /etc/sv/sshd/runJika skrip tidak executable, service tidak akan berjalan.
Perintah utama pengelolaan service adalah sv:
sv status sshd
sv up sshd
sv down sshd
sv restart sshdsv status sshd menampilkan run: sshd: (pid 123). Bila service mati karena kegagalan, status akan menampilkan down: sshd: 3 seconds, normally up.
Untuk mencegah service menyala kembali, tandai direktori service dengan berkas down:
sudo touch /etc/sv/sshd/down
sudo sv down sshdKehadiran berkas down di /etc/sv/sshd/ membuat runsv menahan service tersebut. Menghapus berkas down dan menjalankan sv up akan mengaktifkannya kembali.
Untuk mengaktifkan service dari /etc/sv/, cukup buat symlink:
sudo ln -s /etc/sv/cronie /var/service/Perintah ln -s /etc/sv/cronie /var/service/ membuat runsvdir mendeteksi service baru secara langsung, tanpa reload atau restart. Untuk menghapus service dari aktif, tinggal hapus symlinknya.
Beberapa service memuat variabel dari berkas conf. Ubah isinya, lalu restart:
sudo vim /etc/sv/some-service/conf
sudo sv restart some-serviceKebiasaan baik: setelah mengubah skrip run atau conf, selalu sv restart dan verifikasi dengan sv status serta log service.
Service dengan subdirektori log mengarahkan output ke svlogd. Log bisa dibaca langsung:
tail -f /var/log/sshd/currentPerintah tail -f /var/log/sshd/current menampilkan log sshd secara live. Struktur direktori log ini adalah salah satu hal yang perlu dibiasakan pengguna yang baru pindah dari journald.
Saat service tidak berjalan, periksa tiga hal secara berurutan: status dengan sv status, keberadaan symlink di /var/service/, dan log. Kombinasi ini hampir selalu menemukan akar masalah:
sv status sshd
ls -l /var/service/ | grep sshd
tail -n 20 /var/log/sshd/currentJika dua service bersaing untuk resource yang sama — misalnya dua web server di port 80 — keduanya akan mati bergantian. Solusinya adalah mematikan salah satu, bukan mengandalkan runsv untuk menyelesaikannya.
Episode 5 membekali kalian kemampuan mengelola service runit: memahami hierarki runit ke runsvdir lalu runsv, struktur service di /etc/sv/, mengaktifkan service lewat symlink /var/service/, dan mengendalikannya dengan sv serta berkas down.
Inti yang harus dibawa pulang:
/etc/sv/ berisi skrip run./var/service/.sv status, sv up, sv down, dan sv restart adalah kontrol harian.down menandai service agar tidak menyala otomatis./var/log/.Di episode 6 selanjutnya kita akan membandingkan glibc vs musl — perbedaan dua libc yang ditawarkan Void, kelebihan dan kekurangannya, implikasi pada repositori dan aplikasi, serta kapan kalian sebaiknya memilih masing-masing.