Bloğa geri dön

Bir Linux Servisini Yeniden Başlatma veya Sistem Çökmesi Sonrasında Otomatik Başlayacak Şekilde Yapılandırma: Bölüm 1 (Pratik Örnekler)

Bir Linux Servisini Yeniden Başlatma veya Sistem Çökmesi Sonrasında Otomatik Başlayacak Şekilde Yapılandırma: Bölüm 1 (Pratik Örnekler)

Giriş

Bilişimde işler her zaman planlandığı gibi gitmez. Çoğu zaman beklenmedik sistem çökmeleri, sistem yöneticilerini yeniden başlatma işlemlerini ve tek tek hizmetleri yeniden başlatmayı tetiklemeye yönlendirir. Bir sistem çökmesi veya yeniden başlatmanın ardından uygulamanızın çalışması için ihtiyaç duyduğu her hizmeti bulup yeniden başlatmak can sıkıcı olabilir. İki bölümlü bu eğitimin ilk bölümünde, pratik örneklerle bir sistem çökmesi veya sunucu yeniden başlatılmasının ardından hizmetleri otomatik olarak başlayacak şekilde nasıl yapılandıracağınızı göstereceğiz. ikinci bölüm teorik bilgileri kapsayacak birinci bölümde ne elde ettiğimiz hakkında.

Pratik örnekler için MySQL veritabanı hizmetini kullanacağız. Ancak aynı ilkeler, eksiksiz bir sunucuyu oluşturan diğer süreçler için de geçerlidir, örneğin Nginx, Apache, Redis, veya diğer uygulamalar. Şu konulardaki eğitimlerimize göz atabilirsiniz: MySQL nasıl kurulur, Nginx, ve Apache.

In Linux dağıtımlarında, çalıştırdığınız dağıtıma bağlı olarak üç ana başlatma (init) sistemi bulunur. Bazı dağıtımlar, aşağıda belirtildiği gibi iki veya daha fazla init sistemiyle gelebilir:

  • System V – aşağıdakiler gibi daha eski dağıtımlarda bulunan daha eski bir init sistemi:
    • Ubuntu 9.04 ve öncesi
    • CentOS 5 ve öncesi
    • Debian 6 ve öncesi
  • Upstart – aşağıdakiler gibi eski dağıtımlarda kullanılan:
    • CentOS 6
    • Ubuntu 9.10 ila Ubuntu 14.10 ve Ubuntu 14.04
  • Systemd – aşağıdakiler gibi en son dağıtımlarda kullanılan:
    • CentOS 7
    • Debian 7 ve 8.
    • Ubuntu 15.04 ve daha yeni

Arka Plan

İşletim sistemlerinin, özellikle de Linux ve Unix sistemlerinin arka planda çalışan süreçlere ve hizmetlere sahip olması yaygındır. Bu tür hizmetler işletim sistemi yazılımıyla birlikte gelmiş olabilir. Bazıları ise yüklediğiniz kullanıcı uygulamalarıyla birlikte gelmiş olabilir.

İşletim Sistemi hizmetleri şunları içerir:

  • sshd – Uzaktan bağlantılara izin veren arka plan programıdır (daemon).
  • cupsd – Yazdırmayı kontrol eden arka plan programıdır (daemon).

Yüklü uygulama hizmetleri şunları içerir:

  • httpd/apache2 – Apache2 web sunucusuyla birlikte gelen bir hizmet.
  • nginx – Nginx web sunucusuyla birlikte gelen bir hizmet.

Web uygulamalarımızın, veritabanlarımızın, posta sunucularımızın vb. erişilebilir olmasını sağlamak için bu tür hizmetlerin sürekli çalışması gerekir. Eğer bir sistem yöneticisi veya meraklı bir uygulama geliştiricisiyseniz, bu tür hizmetlerin sürekli çalışmasını ve olası bir sistem çökmesi durumunda sistem yeniden başlatıldıktan sonra otomatik olarak başlamasını istersiniz. İşte bu uygulamalı eğitimde tam olarak bunu öğreneceğiz.

Uyarılar ayarlamak ve Linux dağıtımınızı sürekli izlemek çok önemli olsa da, bazı Linux hizmetleri, hizmetleri yöneten init sistemleri sayesinde iyi yapılandırıldıklarında kendi kendilerini iyileştirebilirler.

Linux dağıtımlarında, sistem başlatmayı uygulayan ve çalışma seviyeleri (runlevels) olarak adlandırılan mod işlemleri vardır. Bir hizmetin otomatik olarak başlaması için bir çalışma seviyesine eklenmesi gerekir. Her Linux ve Unix benzeri sistem, aşağıda listelenen dört ortak çalışma seviyesine sahiptir:

  • 0 – Runlevel 0, sistemin kapatılmasını belirtir.
  • 1 – Runlevel 1, tek kullanıcı, kurtarma modunu belirtir.
  • 2, 3, 4 – Bu runlevel'lar, sistemin çok kullanıcılı, ağ etkin, metin modunda başlatıldığı durumları belirtir.
  • 5 – Runlevel 5, çok kullanıcılı, ağ etkin, grafiksel modu belirtir.
  • 6 – Runlevel 6, sistemin yeniden başlatılmasını belirtir.

Bu eğitimde, daha önce açıklanan üç farklı init modunu (System V, Upstart ve Systemd) kullanarak sistem yeniden başlatıldığında bir Linux hizmetinin otomatik olarak başlamasını nasıl yapılandıracağınızı öğreneceksiniz.

Gereksinimler

Bu uygulamalı eğitim, takip etmek için kullanabileceğiniz bir Linux VPS'nizin olmasını bekler. Cloudsigma'daki ücretsiz deneme süresinden yararlanabilir ve komutları denemek için bazı sunucuları başlatabilirsiniz. Ubuntu sunucularınızı nasıl kuracağınıza dair adım adım eğitimimizi takip edebilirsiniz.

Bu eğitimde oluşturduğunuz sunucular tamamen uygulamalı pratikleri takip etmek içindir ve birçok hizmet kesintiye uğrayacağından komutları canlı (production) bir sunucuda denememelisiniz.

İhtiyacınız olacak dağıtımlardan bazıları:

  • Ubuntu 9.04 ve öncesi veya Debian 6 x64 (System V init sistemini göstermek için kullanılacaktır)
  • Ubuntu 14.04 x64 (Upstart'ı göstermek için kullanılacaktır)
  • CentOS 7 x64 (systemd'yi göstermek için kullanılacaktır).

Sudo yetkilerine sahip root olmayan bir kullanıcı kurduğunuzdan emin olun. Bizim sudoers dosyasını yapılandırma konusundaki buradaki kılavuzumuza göz atabilirsiniz.

System V Kullanımı

Bu, aşağıdaki gibi eski Linux dağıtımlarında kullanılan en eski init sistemidir:

  • Debian 6 ve öncesi
  • CentOS 5 ve öncesi
  • Ubuntu 9.04 ve öncesi

MySQL ve Nginx gibi kurulabilir sunucu uygulamalarının çoğu, varsayılan olarak /etc/init.d dizine kaydedilmiş init betikleriyle birlikte gelir. Bu betikler, yeniden başlatmanın ardından çalışmalarını sağlar. Ancak, bir sistem çökmesinden sonra otomatik olarak başlayacak şekilde yapılandırılmamış olabilirler.

System V için Otomatik Başlatma Kontrol Listesi

İlk adım, /etc/init.d/service dizininde işlevsel bir Bash init betiğinin bulunup bulunmadığını kontrol etmektir. Servisi etkinleştirmek için, Debian veya Ubuntu dağıtımlarında, update-rc.d komutunu kullanın; bir CentOS sisteminde ise chkconfig komutunu kullanın. Gerçek servis adınızla değiştirin:

Yukarıdaki komut, /etc/rc2.d dizininde aşağıdaki çıktıya benzer bir sembolik bağlantı (symlink) oluşturur. Otomatik olarak oluşturulduğu için kendiniz oluşturmayın:

Dosyanın en altına /etc/inittab aşağıdaki genel örnekte gösterildiği gibi bir respawn satırı ekleyin. Bunu, uygulamanızın başlangıç betiğinin gerçek yoluyla değiştirmeyi unutmayın:

Servisi durdurmak ve başlatmak için aşağıdaki komutları girin:

Ardından, sunucuyu yeniden başlatın:

Değişiklikler Nasıl Test Edilir?

Sunucuyu yeniden başlattıktan sonra, şu komutu kullanarak işlem numarasını arayarak servisin çalışır durumda olduğunu doğrulayın:

Şu komutu kullanarak işlemi sonlandırın (kill):

Beş dakika sonra, servisin çalışır durumda olduğunu doğrulayın.

Gerçek Bir Servis ile Pratik System V Yapılandırması

Aşağıdaki adımlarda, MySQL gibi gerçek bir sunucu uygulamasını deneyeceğiz. Bir Debian 6 sanal makinesine erişiminiz olmalıdır. Sudo yetkilerine sahip bir hesapla, SSH veya bir Windows masaüstündeyseniz putty kullanarak bağlanın.

Adım 1: MySQL Kurulumu

MySQL'i kurmak için aşağıdaki komutu girin:

Kurulum başladığında sizden bir root şifresi istenecektir. İstediğiniz bir şifreyi girin ve onaylayın. Kurulumun tamamlanmasını bekleyin, ardından MySQL'i güvenli hale getirmeye başlamak için aşağıdaki komutu girin:

Daha önce girdiğiniz root şifresi sorulacaktır. Şifreyi korumak için N tuşuna basın. Ardından, anonim kullanıcıları kaldırma, uzaktan root girişini devre dışı bırakma ve test veritabanını kaldırma istemlerini kabul etmek için Y tuşuna basın. Son olarak, değişikliklerin otomatik olarak yansıması için yetki tablosunun (privileges table) yeniden yüklenmesini kabul edin.

Bu işlem MySQL kurulumunu tamamlar. Aşağıdaki komutu girerek servisin çalışıp çalışmadığını kontrol edebilirsiniz:

Adım 2: MySQL'i Yeniden Başlatmadan Sonra Otomatik Başlayacak Şekilde Yapılandırma

MySQL, varsayılan olarak sistem yeniden başlatıldıktan sonra başlayacak şekilde yapılandırılmıştır. MySQL başlatma betiğinin sembolik bağlantısını (symlink) /etc/rc2.d dizininde bulabilirsiniz. Bu sembolik bağlantılar manuel olarak oluşturulmaz. Servisleri etkinleştirmek ve devre dışı bırakmak için update-rc.d komutunu kullanabilirsiniz.

Dizinin içeriğini listelemek için aşağıdaki komutu girin:

MySQL init betiğine giden sembolik bağlantıyı fark edip edemediğinizi kontrol edin:

The S harfi önemlidir, çünkü bir S servis için varsayılan çalışma seviyesi (runlevel) dizini altındaki betik sayesinde, init sistemi sunucu önyüklendiğinde servisi başlatacaktır. MySQL'in yeniden başlatmanın ardından otomatik olarak başlayacağını doğrulamak için, sistemi yeniden başlatmak üzere aşağıdaki komutu girin:

Yeniden başlatma sırasında ssh bağlantınız sonlanır. Bir veya iki dakika bekleyin ve tekrar bağlanın. Servisin çalışıp çalışmadığını kontrol etmek için aşağıdaki komutu çalıştırın:

Çıktı, servisin çalıştığını gösterecektir. Bu, yeniden başlatmanın ardından otomatik olarak başladığı anlamına gelir. Otomatik olarak başlayacak şekilde yapılandırılmamış servisler için bunları kendiniz yapılandırmanız gerekecektir.

Otomatik başlayıp başlamadığını test etmek için MySQL servisini devre dışı bırakabilir ve sistemi yeniden başlatabiliriz. Debian ve Ubuntu sistemlerinde, update-rc.d komutunu kullanarak init sistemine servis ekleyebilir veya kaldırabilirsiniz. MySQL servisini devre dışı bırakmak için aşağıdaki komutu girin:

Sistemi yeniden başlatın ve ssh kullanarak tekrar bağlanın. Aşağıdaki komutu kullanarak MySQL'e bağlanmayı deneyin:

Şu şekilde bir MySQL hatası alacaksınız:

Ardından, servisi tekrar etkinleştirmek için aşağıdaki komutu girin:

Eğer bir CentOS dağıtımı kullanıyorsanız, komut şu şekilde olacaktır:

MySQL başlangıçta çalışmadığı için onu başlatmanız gerekir. Aşağıdaki komutu girin:

Adım 3: Bir Servisi (MySQL) Sistem Çökmesinden Sonra Otomatik Başlayacak Şekilde Yapılandırma

System V, bir çökmeden sonra bir süreci otomatik olarak başlatmaz. MySQL süreç kimliğini (PID) bulup sonlandırarak bir sistem çökmesini simüle edebiliriz. MySQL süreç kimliğini bulmak için aşağıdaki komutu girin:

Çıktıdan MySQL süreçlerini bulun. MySQL'i çalıştıran ana süreçler mysqld_safe ve mysqld'dir. Süreç kimliklerini (bunlar sayılardır) not edin ve bunları sonlandırmak için aşağıdaki komutları kullanın:

Aşağıdaki komutu kullanarak MySQL servis durumunu kontrol edin:

Çıktı, MySQL'in durduğunu gösterecektir. Servis başlatma komutunu kullanarak manuel olarak yeniden başlatabiliriz. Ancak, otomatik bir süreç istiyoruz. Bu otomatik davranışı elde etmek için, /etc/inittab dosyasını düzenlememiz gerekir. Bu, System V init'in sistem açılırken okuduğu ilk dosyadır. /etc/inittab dosyası, bir sürecin çökmesi durumunda nasıl davranması gerektiğine dair talimatlar içerir. Düzgün yapılandırılırsa, bir çökme olduğunda sistemi yeniden başlatır. Bizim durumumuzda, MySQL'in bu servislerden biri olduğundan emin olmak istiyoruz.

The /etc/inittab dosyası bir Linux dağıtımı için son derece önemlidir. Sisteminizin yeniden başlayıp başlamayacağını belirler. Komutlarda bir hata yaparsanız, yeniden başlattığınızda sistem açılmayabilir. Belirttiğimiz gibi, bu komutları canlı (production) bir ortamda değil, yalnızca bir test sunucusu ortamında denediğinizi umuyoruz.

İlk olarak, düzenlemeye başlamadan önce dosyanın bir kopyasını alın:

Ardından, nano kullanarak dosyayı açın:

Dosyanın sonuna gidin ve aşağıdaki kod parçacığını ekleyin:

Yukarıdaki komut, bir sistem çökmesinden sonra mysql_safe sürecini yeniden başlatır. Aşağıda açıklandığı gibi iki nokta üst üste işaretiyle ayrılmış dört alana sahiptir:

  • ms: Süreç için bir kimlik (id) belirtir.
  • 2345: Komutun uygulanacağı çalışma seviyelerini (runlevels) belirtir. Bu durumda: çalışma seviyeleri 2, 3, 4, 5.
  • respawn: Eylemi belirtir. Bu durumda, süreci yeniden canlandırıyor (respawn) veya yeniden başlatıyoruz.
  • /bin/sh /usr/bin/mysqld_safe: Son kısım süreci tanımlar – süreci yeniden başlatmak için yürütülen komut.

Şimdi dosyayı kaydetmek için Ctrl + O ve Enter tuşlarına basın. Ardından, editörü kapatmak için Ctrl + X tuşlarına basın. Servisi başlatmak için aşağıdaki komutu girin:

Sunucuyu yeniden başlatın, ardından işlem numarasını bulmak için daha önce açıklanan komutları çalıştırın. Sonra, şu komutla başlayarak işlemleri sonlandırın: ps -ef | grep mysql. Birkaç dakika bekleyin ve MySQL'in durumunu kontrol etmek için aşağıdaki komutu girin:

Çıktı, MySQL servisinin çalışır durumda olduğunu göstermelidir; bu da bir çökmeden sonra yeniden başlayabildiği anlamına gelir. Sunucunuzdaki diğer servisler için de aynı süreci takip edebilirsiniz.

Upstart ile Servisleri Otomatik Başlatma

Upstart ilk olarak Ubuntu 6'da tanıtılan ve daha sonra Ubuntu 9.10'da varsayılan hale gelen başka bir init sistemidir. RHEL 6 ve türevleri ile Google'ın Chrome OS işletim sistemi de Upstart init sistemini kullanır. Bu bölümdeki adımlar için, aşağıdaki dağıtımlardan herhangi birini çalıştıran bir sunucunuz olmalıdır:

  • Ubuntu 9.10'dan Ubuntu 14.10'a kadar olan sürümler ve Ubuntu'nun LTS sürümü, yani Ubuntu 14.04.
  • CentOS 6

Yeniden başlatmalar veya sistem çökmeleri durumunda sunucu servislerinizi otomatik olarak başlatmak için Upstart dosyalarını nasıl yapılandırabileceğinizi görelim. Upstart, bir Linux dağıtımındaki servisleri kontrol etmek için /etc/init dizini altında saklanan yapılandırma dosyalarını kullanır. MySQL ve Nginx gibi sunucu uygulamalarının en son sürümleri, kendi init betiklerini /etc/init dizinine yükler. Böylece, sizin bir şey yapmanıza gerek kalmadan sistem yeniden başlatıldıktan ve bir çökmeden sonra çalışmaya başlayacaklardır.

Upstart için Otomatik Başlatma Kontrol Listesi

Servisinizin otomatik olarak başlayacak şekilde yapılandırıldığından emin olmak için kontrol etmeniz gereken bazı referans yapılandırmaları aşağıda verilmiştir.

  • Servisin şu dizinde bir init betiği olduğundan emin olun: /etc/init/service_name.conf service_name ifadesi, ilgili servisinizin gerçek adıdır. /etc/init/service_name.conf dosyasında şu iki satırı kontrol etmelisiniz:
    • Şuna benzer bir satır: start on runlevel [2345]. Bu, servisin sistem yeniden başlatıldığında başlatılacağını gösterir.
    • Şuna benzer bir satır: respawn. Bu, servisin bir sistem çökmesinden sonra yeniden canlandırılacağını/başlatılacağını gösterir.
  • Dizinde bir servis geçersiz kılma (override) dosyası olmadığından emin olun: /etc/init/service_name.override. Tabii siz veya başka bir sistem yöneticisi bunu daha önce oluşturmadıysa.
  • Servisi durdurmak ve başlatmak için aşağıdaki komutları girin:
  • Sistemi yeniden başlatın ve birkaç dakika sonra tekrar bağlanın. Şimdi, her şeyin çalışıp çalışmadığını görmek için bazı testler yapın
  • Yeniden başlattıktan sonra, servisin çalışır durumda olduğunu doğrulayın. İşlem numarasını aramak için aşağıdaki komutu girin, service_name kısmını test ettiğiniz servisin gerçek adıyla değiştirin:
  • İşlem numarasını aldıktan sonra, işlemi sonlandırmak için aşağıdaki komutu girin:
  • Birkaç saniye bekleyin ve işlemin tekrar çalışır durumda olduğunu doğrulayın.

Gerçek Bir Servis ile Pratik Upstart Yapılandırması

Bir sonraki bölümde, Upstart'ı gerçek bir servis ile nasıl kullanabileceğinizi göstermeye çalışacağız. Testleri, servis olarak MySQL kullanan bir Ubuntu 14.04 sanal makine sunucusunda gerçekleştireceğiz. Windows kullanıyorsanız ssh veya putty kullanarak Ubuntu 14.04 test sunucunuza bağlanın. Genel kural olarak, sudo yetkilerine sahip root olmayan bir kullanıcı kullanıyor olmalısınız. Giriş yaptıktan sonra adımlara başlayabiliriz:

Adım 1: MySQL Kurulumu

Yeni bir yazılım kurmadan önce paketlerinizi güncellemeyi her zaman unutmayın:

Şimdi, MySQL sunucusunu kurmak için aşağıdaki komutu girin:

İstendiğinde bir root şifresi oluşturun. Kurulumun tamamlanmasını bekleyin ve MySQL kurulumunuzu güvenli hale getirmeye başlamak için aşağıdaki komutu çalıştırın:

Daha önceki bölümde yaptığınız gibi yönergeleri takip edin. Ardından, değişikliklerin hemen yürürlüğe girmesi için yetkileri temizleyin (flush privileges).

Adım 2: Bir Servisi (MySQL) Sistem Yeniden Başlatıldıktan Sonra Otomatik Başlayacak Şekilde Yapılandırma

MySQL, yeniden başlatmanın ardından otomatik olarak başlayacak şekilde ayarlanmıştır. Kendi özel uygulamalarımızı da yeniden başlatmanın ardından otomatik olarak başlayacak şekilde nasıl yapılandırabileceğimizi öğrenmek için yalnızca yapılandırma dosyalarına bakıyoruz. MySQL servisi kurulumdan sonra otomatik olarak başlatıldı. Ancak, aşağıdaki komutu girerek çalıştığını onaylayalım:

MySQL servisinin çalıştığını gösteren, şuna benzer bir çıktı görmelisiniz:

Sunucunuzu yeniden başlatın ve tekrar oturum açın. Çalıştığını test etmek için aşağıdaki komutu tekrar girin:

Çıktı, MySQL'in çalıştığını belirtecektir, yani yeniden başlatmanın ardından otomatik olarak başlatılmıştır. Bu durumda hiçbir şeyin değiştirilmesi gerekmez. Ancak bu davranış diğer uygulamalar için aynı olmayabilir. Upstart init sisteminin, yeniden başlatmanın ardından MySQL'i otomatik olarak başlatması gerektiğini nasıl bildiğini merak ediyor olabilirsiniz. MySQL, Upstart başlangıç yapılandırma dosyasını şu konuma yükler: /etc/init/mysql.conf. Upstart dosyaları kabuk betikleri (shell script) değil, pre-start (başlangıç öncesi) ve post-start (başlangıç sonrası) olayları için betik blokları içeren metin dosyalarıdır. Bu bloklar, MySQLd işlemi başlarken veya zaten başlamışken Upstart sistemine neyi yürüteceğini bildirir.

Dosyayı nano ile düzenleyicide açmak için aşağıdaki komutu girin:

Dosyanın çıktısı şu şekilde görünebilir:

Görüldüğü gibi, start bloğu MySQL'e 0,1,6 çalışma seviyelerinde değil, 2,3,4,5 çalışma seviyelerinde (runlevel) başlamasını söyler. Uygulamanız için bir Upstart yapılandırması tanımlıyorsanız, bunu bu bölümde tanımlayacaksınız. Respawn bloğu, Upstart'a bir çökmeden sonra ne yapacağını bildirir. Bunu bir sonraki bölümde ele alacağız, bu nedenle dosyayı nano düzenleyicide açık tutun.

Adım 3: Bir Servisi (MySQL) Çökmeden Sonra Otomatik Başlayacak Şekilde Yapılandırma

The respawn yönergesi, /etc/init/mysql.conf dosyasında Upstart'a bir çökmeden sonra MySQL servisini yeniden başlatmasını bildirir.

respawn limit yönergesi, Upstart'a çöken MySQL servisini saniye cinsinden belirtilen bir aralıkta kaç kez yeniden başlatmaya çalışması gerektiğini bildirir. İlk argüman (2), deneme sayısını gösterir. İkinci argüman (5), saniye cinsinden aralığı gösterir. Bir çökmeden sonra Upstart, MySQL servisini eşik değer içinde yeniden başlatamazsa, servis durdurulmuş olarak kalacaktır. Bu davranış, sürekli çöken servisleri sürekli olarak yeniden başlatmaya çalışması durumunda sistemin kararlılığının etkilenmesini önlemek için tasarlanmıştır. Artık herhangi bir değişiklik yapmadan düzenleyiciyi kapatabilirsiniz.

MySQL'in bir çökmeden sonra otomatik olarak tekrar açılıp açılmayacağını test edelim. Durumu kontrol etmek ve MySQL servisinin işlem (process) numarasını almak için aşağıdaki komutu girin:

Çıktı şuna benzer bir şey olmalıdır. Daha sonra kullanacağımız için işlem (process) numarasını not edin:

Ardından, işlemi sonlandırmak (kill) için aşağıdaki komutu girin. Bu bir çökmeyi simüle eder. Önceki komutta aldığınız işlem numarasıyla değiştirin:

Aşağıdaki komutu girerek MySQL'in durumunu tekrar kontrol edin:

Yeniden çalışıyor olmalıdır, ancak muhtemelen farklı bir işlem numarasıyla:

Bu durum, şuradaki respawn yönergesi nedeniyle gerçekleşir: /etc/init/mysql.conf dosyası. Herhangi bir sistem arızası durumunda MySQL'in otomatik olarak başlamasını sağlar. Böylece, bir MySQL veritabanına bağlı olan uygulamanız beklendiği gibi çalışmaya devam edecektir.

Systemd ile Servisleri Otomatik Başlatma

Systemd en son Linux dağıtımlarının çoğunda bulunan bir başlatma sistemidir. Muhtemelen yeni bir VPS başlattığınızda kullanacağınız şeydir. İlk olarak Fedora'da tanıtılmıştır. RHEL 7 ve CentOS 7 gibi türevleriyle birlikte gelir. Ubuntu 15.04'ten itibaren Systemd'yi yerel olarak bulacaksınız. Systemd, System V başlatma betikleri ve komutlarıyla geriye dönük uyumludur. Bu nedenle, herhangi bir System V servisi Systemd altında çalışmalıdır. System V ve Upstart'ta kullanılan çoğu komut, Systemd ile çalışacak şekilde değiştirilmiştir.

Systemd ile, MySQL ve Nginx gibi çoğu sunucu uygulaması, sizin bir şeyi değiştirmenize gerek kalmadan, yeniden başlatma veya kapanma sonrasında otomatik olarak başlayacaktır. Özel uygulamalarınız için, servisleri otomatik olarak yeniden başlatmak üzere kendi init betiklerinizi oluşturmalısınız.

Systemd hakkında daha derinlemesine bilgi için, Systemctl ile Systemd servislerini ve birimlerini nasıl yöneteceğinize dair eğitimimize.

Systemd için Otomatik Başlatma Kontrol Listesi

Servisinizin Systemd ile otomatik olarak başlayacak şekilde yapılandırıldığından emin olmak için kontrol etmeniz gereken bazı referans yapılandırmaları aşağıda bulabilirsiniz.

  • Servisin, /etc/systemd/system/multi-user.target.wants/serviceName.service konumunda bulunan işlevsel bir Systemd init betiğine sahip olması gerekir. ServiceName, yapılandırdığınız servisin gerçek adıdır.
  • Servisi etkinleştirme komutu şudur:
  • Bu komut, /etc/systemd/system/multi-user.target.wants/ dizininde şuna benzer görünebilecek bir sembolik bağlantı (symlink) oluşturur:
  • Bu sembolik bağlantı kurulduğunda, önyüklemeden sonra otomatik yeniden başlatmayı etkinleştirmiş olursunuz.
  • Değişiklikleri etkinleştirmek için, sistem daemon'ını yeniden yükleyin ve ardından aşağıdaki komutları kullanarak servisi yeniden başlatın:
  • Yapılandırmalarınızın yeniden başlatmanın ardından servisi başlatıp başlatmayacağını test etmek için sistemi yeniden başlatabilirsiniz:
  • Sistem yeniden başladığında, şu komutu kullanarak işlem numarasını arayın:
  • İşlem numarasını not edin ve şu komutu kullanarak sonlandırın:
  • Birkaç saniye bekleyin ve tekrar çalıştığını doğrulamak için servisi tekrar arayın.

Gerçek Bir Servis ile Pratik Systemd Yapılandırması

Bu bölümde, bir Ubuntu 20.04 sanal makinesinde MySQL servisini yapılandırmayı deneyeceğiz.

Adım 1: Sanal Özel Sunucunuza Bağlanın (Ubuntu 20.04 veya CentOS 7 x64)

VPS'nize giriş yapın veya Cloudsigma panelinden bir tane oluşturun ve Windows kullanıyorsanız ssh veya putty kullanarak bağlanın. Eğitimin bu bölümü için Ubuntu 20.04 sunucusu kullanıyoruz. Aynı komutlar CentOS 7 için de geçerli olabilir. Sudo ayrıcalıklarına sahip root olmayan bir kullanıcı kullandığınızdan emin olun.

Adım 2: MySQL Kurulumu (yapılandırdığımız servis)

İlk olarak, sisteminizi güncelleyin:

Ardından, şu komutu kullanarak MySQL sunucusunu kurabilirsiniz:

Ardından, MySQL'i güvenli hale getirmeye başlamak için aşağıdaki komutu çalıştırın:

Betik size VALIDATE PASSWORD bileşenini kurmak isteyip istemediğinizi sorar veya bileşeni etkinleştirmeden devam etmek için herhangi bir harfe basmanızı ister. Şunun hakkında daha fazla bilgi edinmek için bu bağlantıyı takip edin: MySQL şifre doğrulama bileşeni.

Etkinleştirmek için 1'e basın ve ardından 1'e basarak orta seviyeyi seçin. Güçlü bir şifre girin: büyük harf, küçük harf, özel karakterler ve rakamların birleşimi. Şifreyi onaylayın ve girdiğiniz şifreyi root şifresi olarak kullanmak isteyip istemediğinizi soran istemi onaylayın. Diğer istemlerin geri kalanı için, önceki bölümlerde yaptığınız gibi kabul etmek için y tuşuna basın. Son olarak, değişiklikleri yeniden yüklemek için MySQL ayrıcalıklarını temizleyin (flush).

Adım 3: MySQL'i Yeniden Başlatmadan Sonra Otomatik Başlayacak Şekilde Yapılandırın

MySQL, yeniden başlatmanın ardından başlayacak şekilde yapılandırılmıştır, bu nedenle yapmanız gereken bir değişiklik yoktur. Ancak, özel dosyalarımızı nasıl yapılandıracağımızı öğrenmek için MySQL yapılandırma dosyalarını kullanabiliriz.

İlk olarak, MySQL servisinin açılışta başlayacak şekilde yapılandırılıp yapılandırılmadığını kontrol edin. Aşağıdaki komutu girin (Centos'ta MySQL servisinin mysqld olarak adlandırıldığını unutmayın):

İşte çıktı:

CS screenshot

Ardından, aşağıdaki komutu girerek VPS'yi yeniden başlatın:

Ssh kullanarak geri bağlanın ve MySQL servisinin durumunu kontrol etmek için aşağıdaki komutu girin:

Aşağıdaki ekran görüntüsündekine benzer bir çıktı almalısınız:

System Crash 3

MySQL servisini devre dışı bırakmak için aşağıdaki komutu girin:

Çıktı, MySQL servisine giden sembolik bağlantıların Systemd'den kaldırıldığını gösterir:

screenshot it 4

Aşağıdaki komutu girerek servisin Systemd init sistemi ile etkinleştirilip etkinleştirilmediğini test edebilirsiniz:

Çıktı, devre dışı bırakıldığını gösterecektir. Sisteminizi yeniden başlatırsanız, MySQL açılışta başlamayacaktır:

disabled screenshot

Aşağıdaki komutu girerek servisi etkinleştirin:

Çıktı, Systemd init içinde oluşturulan MySQL servisine giden sembolik bağlantıyı gösterir:

screenshot 5

Yeniden başlattığınızda, MySQL servisi otomatik olarak başlayacaktır.

Adım 4: MySQL'i Çökmeden Sonra Otomatik Başlayacak Şekilde Yapılandırın

MySQL, bir çökmeden sonra otomatik olarak yeniden başlayacak şekilde yapılandırılmıştır. Bu yapılandırmanın Systemd'de nasıl uygulandığına bakalım. Systemd, yapılandırma için birim (unit) dosyalarını kullanır. mysql.service yapılandırma dosyasını nano'da açmak için aşağıdaki komutu girin:

Çıktı şuna benzer:

System Crash 2

Bizi ilgilendiren kısım Restart yönergesidir. Tanımlandığı gibi, bir hata oluşursa MySQL yeniden başlayacaktır. Restart yönergesi, tıpkı Upstart'taki Respawn yönergesi gibi Systemd'de ne olması gerektiğini tanımlar.

Tüm servislerde bu yönerge bulunmaz. Bir servisin çökmeden sonra yeniden başlamasını sağlamak için, her zaman Restart yönergesini servis yapılandırma birim dosyasının [Service] bloğunun altına ekleyebilirsiniz. Eğer [Service] başlığı yoksa, ekleyin. Şimdi, Ctrl + X tuşlarına basarak düzenleyiciden çıkın.

Bir çökmeyi simüle etmek için, aşağıdaki komutu girerek MySQL işlem kimliğini (PID) bulun:

Durum kontrol komutu bir işlem kimliği görüntüler, bizim durumumuzda bu 3555'tir:

System Crash 1

İşlemi sonlandırmak için aşağıdaki komutu girin. Bunu sunucunuzda aldığınız işlem kimliği ile değiştirin:

Durumu kontrol etmek için aşağıdaki komutu girin:

Çıktı, MySQL'in çalıştığını ancak yeni bir işlem kimliğiyle çalıştığını gösterir. Bu, çökmeden sonra otomatik olarak yeniden başlatıldığı anlamına gelir:

screenshot 8

Sonuç

Bu eğitimde, sizi Linux dağıtımlarındaki üç başlatma sistemiyle tanıştırdık: System V, Upstart ve Systemd. Sürekli çalışan servislerinizi, yeniden başlatma veya sistem çökmesinden sonra otomatik olarak başlayacak şekilde yapılandırmak için bu init sistemlerinden herhangi birini nasıl kullanacağımızı öğrendik. Bu, servislerinizi yapılandırmanız gerektiğinde sizin için bir başlangıç noktası olmalıdır. Bu serinin birinci bölümü ağırlıklı olarak uygulamalı pratik bir eğitimdi. ikinci bölüm daha teoriktir ve birinci bölümde neler yaptığımıza dair daha fazla ayrıntı içerir. Test sunucularınızı henüz silmeyin, çünkü onları ikinci bölümde de kullanacaksınız.

Keyifli Hesaplamalar!

 

author

Manpreet Singh

Yazar · CloudSigma

Preslav Dobrev, CloudSigma'da Kreatif Tasarımcı olarak görev yapmakta olup geleneksel ve yenilikçi pazarlama kanallarını kullanarak tutarlı bir kurumsal kimlik oluşturmaya odaklanmaktadır. Sanatsal vizyonu stratejik pazarlamayla harmanlayarak etkili marka anlatıları oluşturma konusunda oldukça yeteneklidir.

Yorumlar

Henüz yorum yapılmamış. İlk siz olun.