Upstart

Yazar: Çağrı Emer Kategori: Tanıtım Yazdır: PDF 16 Temmuz 2012 tarihinde yayımlandı.

Giriş

6.10’dan beri Ubuntu’da olan Upstart, init artsürecinin yerini alan bir uygulamadır. Uygulama, farklı dağıtımlarda da yer almaktadır.

Upstart işletim sisteminin başlatılması esnasında görev ve servislerin başlatılması, kapatılması esnasında durdurulması, bilgisayar çalışırken de kontrol edilmesi işlevini yerine getiren ve 6.10’dan itibaren Ubuntu’da geleneksel init artsürecinin yerini alan uygulamadır. Aslında Ubuntu için geliştirilmesine rağmen, init kullanan tüm Linux dağıtımlarında geleneksel init’in yerini alabilir. Şu anda bilinen kullanıcıları arasında Ubuntu dışında Debian, Red Hat, Google Chrome OS ve Maemo gibi dağıtımlar bulunmaktadır.

Upstart betiklerinin nasıl yazılacağına geçmeden önce init ne iş yapar değinmek doğru olacaktır. Çekirdek tarafından başlatılan init, sistemdeki bütün süreçlerin başlatılması işlemini yerine getirir. init tarafından yönetilen tüm süreçler “iş” olarak tanımlanır ve /etc/init dizini altındaki dosyalarda tutulur. Ubuntu’daki init(8)* olay-tabanlı bir artsüreçtir. Bu da sistem durumundaki herhangi bir değişiklikte işlerin ya da süreçlerin otomatik olarak başlatılıp durdurulabilmesini sağlar. Bağımlılık-tabanlı init artsüreçlerinden farkları bu işlemleri yapmak için başka işlerin başlamasını beklememek ve bağımlılık listelerini bir döngüyle taramamaktır denebilir.

Sistemde init ile ilgili kullanılabilecek üç dizinden söz edilebilir. Bunlar şöyledir:

Dizinler Açıklama
/etc/init Upstart yapılandırma dosyalarının tutulduğu dizindir.
/etc/init.d Geleneksel init betiklerinin ve geriye dönük uyumluluğa sahip Upstart yapılandırmalarının bulunduğu dizindir.
/etc/default Upstart ve geleneksel init’in çalışma şekillerini kontrol eden dosyaların tutulduğu dizindir.

Sayılan dizinlerde tutulan dosyalar özetle, bir süreci kontrol etmek için yapılması gerekli olan işlemleri barındırır. Upstart sayesinde örneğin SSH sunucuyu şu komutlarla yönetmek mümkündür:

Komut İşlevi
start ssh Süreci başlatır.
stop ssh Süreci sonlandırır.
reload ssh Sürecin yeni yapılandırma dosyalarını kullanmasını sağlar.
restart ssh Sürece SIGHUP sinyali göndererek yeniden başlatılmasını sağlar.
status ssh Sürecinin çalışıp çalışmadığı bilgisini döndürür.

Bütün bu yukarıda sayılan iş tanımları Upstart sayesinde mümkündür. /etc/init/ssh dosyası içerisinde ssh artsürecini başlatan exec kısmı bulunur. Bir uygulamanın var olan init dosyasını incelemektense, sıfırdan bir init dosyası örneği oluşturmak konseptin anlaşılması adına daha iyi olacaktır. Ubuntu’da bu işi sıfırdan yapmak için init(5)** man sayfası çok iyi bir kaynaktır. Bu dosya oluşturulacak betiklerin /etc/init dizininde .conf ya da .override uzantısı ile oluşturulması gerektiğini söyler. .conf uygulamanın ya da sürecin temel yapılandırması iken .override temel yapılandırmaki tanımları ezen kuralları içeren dosyadır. Dolayısıyla bir süreç için yalnızca bir .conf dosyası ya da hem .conf hem de .override dosyası kullanılabilecekken, yalnızca .override dosyasının kullanılması mümkün değildir. Yapılandırma dosyaları çalıştırma izinleri olmayan düz metin dosyaları olmalıdır.

Temel Kısımlar

exec - script Bütün iş dosyaları exec ya da script kısmı içermek zorundadır. Fakat ikisini birden barındıramazlar. 1 Bu iki kısmın farkı, exec ile bir komut verilebilecekken script ile komutlardan oluşan bir betik yazılabilmesidir. Bir de eğer “script” kullanıldıysa “end script” şeklinde sonlandırmak gerekmektedir.

pre-start - post-start - pre-stop - post-stop Çalıştırmak istenilen işi başlatmadan ya da durdurmadan önce ve başlattıktan ya da durduktan sonra çalıştırılacak komutlar da pre/post-start/stop script kısımları altında tanımlanmaktadır. Yine bu kısımlar “end script” ile sonlandırılır.

start on - stop on Yapılandırma dosyasına eklenecek bu satırlar hangi olay sonucu sürecin başlatılacağını ya da durdurulacağını belirtir. Bu kısımda tanımlanabilecek ilk olay startup’tır. Bilgisayar ilk başladığında dosya sistemi sadece okunabilir hâldeyken ve ağ bağlantılarının olmadığı durumu belirtir. Belirli işleri belirli çalışma düzeylerinde (runlevel) başlatmak için kullanılabilecek seçenek runlevel’dır. Bahsedilmeye değer kullanılabilecek son iki seçenek ise started ve stopped seçenekleridir. Bu seçenekler kontrol edilmek istenen süreçlerin hangi süreçler başlatıldıktan ya da durdurulduktan sonra yönetileceğini anlatır. Ubuntu için tanımlı bütün olayların listesine Upstart Wiki’sinde bulunan “cookbok” isimli belgenin ilgili kısımından ulaşılabilir. 2

console Bu yazıda değinilecek son önemli kısım console kısmıdır. Console kısmı sayesinde bir sürecin girdi ya da çıktılarının nereden alınıp nereye gönderileceği kontrol edilebilir. Kullanılabilecek dört seçenek logged, output, owner ve none seçenekleridir. none için /dev/null kullanılır ve süreçle etkileşime girilmez. output seçeneği /dev/console’u kullanır ve işleri uçbirim üzerinden yürütür. owner seçeneği output’a ek olarak uçbirimin sahibi kullanıcıya süreçlere CTRL+C gibi belirli sinyaller gönderebilme olanağı tanır. Öntanımlı olarak gelen logged ise çıktıların log tutucuya gönderileceğini belirtir.

Bu yazıda bahsedilen kısımlar dışında kullanılabilecek kısımların tam listesine Upstart Wiki’den 3 erişilebilir. Ayrıca detaylı bir başucu kaynağı upstart cookbook 4 da sık kullanılanlar arasında yerini almalıdır.

Örnek Uygulama

Şimdi yukarıda tanımlanan temel işlemleri kullanan iki basit yapılandırma dosyası oluşturulacaktır.

sudo nano /etc/init/surecbir.conf

komutu ile dosya açılarak içerisine şunlar yazılır:

pre-start script
	mkdir /home/<kullanıcı_adı>/Masaüstü/dizinim
end script

script
	echo "Çalışıyor!" > /home/<kullanıcı_adı/Masaüstü/dizinim/calisma.log
end script

post-start script
	sleep 5
end script

post-stop script
	chown -R <kullanıcı_adı>:<kullanıcı_adı> /home/<kullanıcı_adı>/Masaüstü/dizinim
end script

CTRL+X ile dosya kaydedilir.

sudo nano /etc/init/sureciki.conf

komutu ile yeni bir dosya açılarak içerisine şunlar yazılır:

start on stopped surecbir

script
	echo "Bu iş ilk işin sonlanması ile başladı." >> /home/<kullanici_adi>/Masaüstü/dizinim/calisma.log
end script

CTRL+X ile dosya kaydedilir.

Şu anda iki adet süreci tanımlamış bulunmaktasınız. Bunlar “surecbir” ve “sureciki” olarak adlandırıldılar. İkinci süreç, ilk sürece bağımlı olduğundan onun elle başlatılmasına gerek yoktur. İlk süreci şu komut ile başlatabilirsiniz:

sudo service surecbir start

Bu komut sonrasında ilk olarak masaüstünde bir dizinim klasörü oluşturulacaktır. Tanımı pre-start altında yapılmıştır. Ardından dizinim içerisinde calisma.log isimli bir dosya oluşturulacak ve içeriğine “Çalışıyor!” yazılacaktır. Bu işlemin de tanımı script altında verilmiştir. Ardından surecbir isimli süreç beş saniye boyunca bir şey yapmadan bekleyecek ve sonlanacaktır. Bu kısım da post-start altında tanımlı bulunmaktadır. Sürecin sonlanması ile masaüstünde bulunan dizinim klasörünün sahipliği içindeki dosyalar ile birlikte kullanıcınıza verilecektir. Bu işlem de post-stop kısımında tanımlanmıştır.

surecbir sürecinin sonlanmasının ardından sureciki sureci baslayacak ve calisma.log dosyasina “Bu iş ilk işin sonlanması ile başladı.” satırını ekleyecektir. sureciki’nin ne zaman başlayacağını tanımlayan kısım start on kısmıdır.

Kullanıcı Süreçleri

Upstart’ın güncel sürümleri, sistem kullanıcılarının kendi işlerini tanımlamalarına da izin vermektedir. Böylelikle yönetici hakları gerekmeksizin, kullanıcılar kendi süreçlerini yaratabilmekte ve çalıştırabilmektedirler. Sistem için kullanılabilecek stanza’ların (Bu yazıda “kısım” olarak adlandırıldılar.) tümü henüz kullanıcı tanımlı işler için tanımlanmamış olmasına rağmen, temel işleri görebilecek şekilde kullanıcı tanımlı Upstart yapılandırmaları oluşturulabilmektedir. Bunun için yapılması gereken ev dizininde .init isimli bir dizin oluşturup iş tanımlarını tutan .conf dosyalarını bu dizin altına koymaktır. Bir de Ubuntu Upstart öntanımlı olarak kullanıcı işlerinin çalıştırılmasına izin vermediği için /etc/dbus-1/system.d/Upstart.conf dosyası bir yedeği alınarak, Upstart’ın Launchpad sayfasından indirilen yapılandırma ile değiştirilmelidir. Ardından start-stop gibi komutlarla kullanıcı tanımlı işler çalıştırılabilir.

.init dizinini oluşturmak ve Upstart.conf dosyasını değiştirmek için izlenmesi gereken adımlar kısaca şöyledir. Eğer bu yapılandırma değiştirilmek istenirse yedek dosyasının geri döndürülmesi yeterli olacaktır.

mkdir ~/.init
cd ~
wget http://bazaar.launchpad.net/~upstart-devel/upstart/trunk/download/head:/upstart.conf-20080508231852-jw3hh1a1d02tcmj7-1/Upstart.conf
sudo mv /etc/dbus-1/system.d/Upstart.conf /etc/dbus-1/system.d/Upstart.conf.yedek
sudo mv Upstart.conf /etc/dbus-1/system.d/Upstart.conf

Bu yazıda Upstart gibi çok geniş bir konuya giriş yapılmış ve temel işlemlerin nasıl yapılacağı anlatılmıştır. Daha kapsamlı işlemler için kullanıcıların başvuru yapabilecekleri kaynaklar gösterilmiş ve iki basit örnekle kavramın anlatımı tamamlanmaya çalışılmıştır. Başlangıç süreçleri ile ilgili daha fazla bilgi edinmek için /etc/rc* dizinlerinin ne işe yaradığının, o dizinlerde bulunan dosyaların nasıl isimlendirildiğinin ve nasıl yazıldığının araştırılması bu yazıya tamamlayıcı olması açısından önerilmektedir.

Not:
man 8 init (5. ve 8. bölümlerinde tanımlanan init farklıdır)
man 5 init (5. ve 8. bölümlerinde tanımlanan init farklıdır)

Kaynak:

Benzer Yazılar