SMF (Service Management Facility), Solaris 10 ile birlikte gelen yeniliklerden biriydi. SMF’den önce sistem açılırken başlatılacak servis programları, rc scriptleri ile başlatılıyordu. İlk başta SMF yapısını yadırgamış ama kullandıkça sevmeye başlamıştım.
rc scriptleri sıralı bir şekilde çalıştırılıyordu. Birbirine ihtiyaç duyan servisler ile ilgili olarak sadece sıralama ayarı yapılıyordu. İlk servis çalışmasa bile diğeri başlatılabiliyordu. SMF ile birlikte birbirine bağımlı servisler düzgün olarak tanımlanmaya başlandı. Ön şart olarak gereken servis başlamadıysa diğeri bekletiliyor. Birbirine bağımlı olmayan servisler paralel olarak çalıştırılabilir hale geldi. Bu sayede sistemin açılış süresi kısaldı.
Eskiden bir process’i hangi servisin başlattığı bilinemiyordu. SMF sayesinde bu bilgilere kolayca ulaşılıyor. Eski yapıda servisin başlattığı process herhangi bir nedenle kapanırsa bunu sistem yöneticisinin takip etmesi ve yeniden başlatması gerekiyordu. SMF de ise ilgili processin çalışması takip ediliyor ve otomatik olarak yeniden başlatılıyor.
SMF’i kullandıkça keşke benzer bir yapı Linux sistemlerde de olsa demeye başladım. Bir süre sonra systemd çıktı ve bu ihtiyacı karşılamaya başladı.
systemd’yi RHEL 7 çıktıktan sonra daha çok kullanmaya başladım. Debian 8.0 ve sonraki sürümler ile Ubuntu 15.04 ve sonraki sürümler systemd kullanmaya başladı. systemd’nin en sevdiğim tarafı farklı Linux dağıtımlarını birbirine benzetmesidir. RHEL’de servis nasıl başlatılıyordu, Debian’da nasıl başlatılıyordu diye düşünmek zorunda kalmamak hoşuma gidiyor.
systemd sürekli geliştiriliyor ve servis başlatmanın çok ötesine geçti. Örneğin cron ile yaptığımız tanımlamaları artık systemd ile yapabiliyoruz. Bir süre sonra cron tamamen ortadan kalkabilir. Bazı dağıtımlar network ayarlarını networkd ile yapmaya başladı. Geçici olarak oluşturulan dosyalar ile ilgili işlemleri systemd üzerinden yapmak mümkün. Yine journald servis loglarını toplayıp bize gösterebiliyor. Artık inetd gibi programlara da ihtiyaç kalmadı. systemd o görevi yapabiliyor.
Eski run level kavramı da yetersiz olmaya başladı. Birbirine bağımlı servisler için tanım yapmayı kolaylaştıracak kavramlar kullanılmaya başlandı. Run level yerine; SMF milestone, systemd ise target kavramını kullanıyor.
systemd ile servis başlatmak için root yetkisi gerekmiyor. Normal kullanıcılar da sisteme giriş yapmak zorunda kalmadan makine açılırken servislerinin otomatik olarak başlamasını sağlattırabiliyor. Ben bu özelliği WordPress Konteyner yazımda anlattığım şekilde podman ile çalıştırdığım konteynerler için kullanıyorum.