Upstart

Upstart işletim sisteminin başlatılması esnasında görev ve servislerin başlatılmasını, kapatılması esnasında durdurulmasını, 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. Ubuntudaki 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 kullanabilecek üç dizinden söz edilebilir. Bunlar şöyledir,

/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ırlar. Upstart sayesinde örneğin SSH sunucuyu şu komutlarla yönetmek mümkündür.

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ısımı bulunur. Bir uygulamanın varolan 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ısımı içermek zorundadır. Fakat ikisini birden barındıramazlar.[1] Bu iki kısımı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ırlar.

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 haldeyken ve ağ bağlantıları yokkenki durumu belirtir. Belirli işleri belirli çalıştma 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 wikisinde 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ısımıdır. Console kısımı 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 tutucaya 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<br></br>  
    mkdir /home/kullanıcı_adı/Masaüstü/dizinim<br></br>
end script<br></br>  
script<br></br>  
    echo "Çalışıyor!" > /home/kullanıcı_adı/Masaüstü/dizinim/calisma.log<br></br>
end script<br></br>  
post-start script<br></br>  
    sleep 5<br></br>
end script<br></br>  
post-stop script<br></br>  
    chown -R kullanıcı_adı:kullanıcı_adı /home/kullanıcı_adı/Masaüstü/dizinim<br></br>
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 sonrasinda 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ısımı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<br></br>
cd ~<br></br>
wget http://bazaar.launchpad.net/~upstart-devel/upstart/trunk/download/head:/upstart.conf-20080508231852-jw3hh1a1d02tcmj7-1/Upstart.conf<br></br>
sudo mv /etc/dbus-1/system.d/Upstart.conf /etc/dbus-1/system.d/Upstart.conf.yedek<br></br>
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.

Bu yazi ilk defa Temmuz 2012’de cikan Ubuntu Turkiye E-dergisi SUDO’nun 43. sayisinda yayimlanmistir.

5 Mayıs 2013

Posted In: Gezegen, init, ubuntu, Upstart

WP Twitter Auto Publish Powered By : XYZScripts.com