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:
|
1 |
sudo update-rc.d service enable |
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:
|
1 |
lrwxrwxrwx 1 root root 20 Dec 10 07:09 S02mysql -> ../init.d/service |
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:
|
1 |
id:2345:respawn:/bin/sh /path/to/your-application/startup |
Servisi durdurmak ve başlatmak için aşağıdaki komutları girin:
|
1 2 |
sudo service service-name stop sudo service service-name start |
Ardından, sunucuyu yeniden başlatın:
|
1 |
sudo reboot |
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:
|
1 |
ps -ef | grep service-name |
Şu komutu kullanarak işlemi sonlandırın (kill):
|
1 |
sudo kill -9 process_number |
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:
|
1 |
sudo apt-get install mysql-server -y |
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:
|
1 |
mysql_secure_installation |
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:
|
1 |
service mysql status |
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:
|
1 |
ls -l /etc/rc2.d |
MySQL init betiğine giden sembolik bağlantıyı fark edip edemediğinizi kontrol edin:
|
1 |
lrwxrwxrwx 1 root root 15 Dec 2 10:42 S01mysql -> ../init.d/mysql |
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:
|
1 |
sudo reboot |
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:
|
1 |
service mysql status |
Çı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:
|
1 |
sudo update-rc.d mysql disable |
Sistemi yeniden başlatın ve ssh kullanarak tekrar bağlanın. Aşağıdaki komutu kullanarak MySQL'e bağlanmayı deneyin:
|
1 |
mysql -u root -p |
Şu şekilde bir MySQL hatası alacaksınız:
|
1 |
ERROR 2002 (HY000): Can't connect to local MySQL server |
Ardından, servisi tekrar etkinleştirmek için aşağıdaki komutu girin:
|
1 |
sudo update-rc.d mysql enable |
Eğer bir CentOS dağıtımı kullanıyorsanız, komut şu şekilde olacaktır:
|
1 |
sudo chkconfig mysql enable |
MySQL başlangıçta çalışmadığı için onu başlatmanız gerekir. Aşağıdaki komutu girin:
|
1 |
sudo service mysql start |
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:
|
1 |
ps -ef | grep mysql |
Çı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:
|
1 2 |
sudo kill -9 mysqldsafe_number sudo kill -9 mysqld_number |
Aşağıdaki komutu kullanarak MySQL servis durumunu kontrol edin:
|
1 |
sudo service mysql status |
Çı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:
|
1 |
sudo cp /etc/inittab /etc/inittab.original |
Ardından, nano kullanarak dosyayı açın:
|
1 |
sudo nano /etc/inittab |
Dosyanın sonuna gidin ve aşağıdaki kod parçacığını ekleyin:
|
1 |
ms:2345:respawn:/bin/sh /usr/bin/mysqld_safe |
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:
|
1 |
sudo service mysql start |
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:
|
1 |
sudo service mysql status |
Çı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:
|
1 2 |
sudo initctl stop service_name sudo initctl start service_name |
- 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:
|
1 |
ps -ef | grep service_name |
- İşlem numarasını aldıktan sonra, işlemi sonlandırmak için aşağıdaki komutu girin:
|
1 |
sudo kill -9 process_number |
- 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:
|
1 |
sudo apt-get update |
Şimdi, MySQL sunucusunu kurmak için aşağıdaki komutu girin:
|
1 |
sudo apt-get install mysql-server –y |
İ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:
|
1 |
mysql_secure_installation |
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:
|
1 |
sudo initctl status mysql |
MySQL servisinin çalıştığını gösteren, şuna benzer bir çıktı görmelisiniz:
|
1 |
mysql start/running, process 2553 |
Sunucunuzu yeniden başlatın ve tekrar oturum açın. Çalıştığını test etmek için aşağıdaki komutu tekrar girin:
|
1 |
sudo initctl status mysql |
Çı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:
|
1 |
sudo nano /etc/init/mysql.conf |
Dosyanın çıktısı şu şekilde görünebilir:
|
1 2 3 4 5 6 7 8 |
description "MySQL Server" author "Mario Limonciello <superm1@ubuntu.com>" start on runlevel [2345] stop on starting rc RUNLEVEL=[016] respawn respawn limit 2 5 |
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:
|
1 |
sudo initctl status mysql |
Çıktı şuna benzer bir şey olmalıdır. Daha sonra kullanacağımız için işlem (process) numarasını not edin:
|
1 |
mysql start/running, process 738 |
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:
|
1 |
sudo kill -9 7738 |
Aşağıdaki komutu girerek MySQL'in durumunu tekrar kontrol edin:
|
1 |
sudo initctl status mysql |
Yeniden çalışıyor olmalıdır, ancak muhtemelen farklı bir işlem numarasıyla:
|
1 |
mysql start/running, process 1428 |
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:
|
1 |
sudo systemctl enable serviceName.service |
- Bu komut, /etc/systemd/system/multi-user.target.wants/ dizininde şuna benzer görünebilecek bir sembolik bağlantı (symlink) oluşturur:
|
1 |
lrwxrwxrwx 1 root root 11 Dec 1 04:43 /etc/systemd/system/multi-user.target.wants/serviceName.service -> /usr/lib/systemd/system/serviceName.service |
- 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:
|
1 2 3 |
sudo systemctl daemon-reload sudo systemctl restart serviceName.service |
- 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:
|
1 |
sudo reboot |
- Sistem yeniden başladığında, şu komutu kullanarak işlem numarasını arayın:
|
1 |
ps -ef | grep serviceName |
- İşlem numarasını not edin ve şu komutu kullanarak sonlandırın:
|
1 |
sudo kill -9 process_number |
- 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:
|
1 |
sudo apt update |
Ardından, şu komutu kullanarak MySQL sunucusunu kurabilirsiniz:
|
1 |
sudo apt install mysql-server –y |
Ardından, MySQL'i güvenli hale getirmeye başlamak için aşağıdaki komutu çalıştırın:
|
1 |
sudo mysql_secure_installation |
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):
|
1 |
sudo systemctl is-enabled mysql.service |
İşte çıktı:

Ardından, aşağıdaki komutu girerek VPS'yi yeniden başlatın:
|
1 |
sudo reboot |
Ssh kullanarak geri bağlanın ve MySQL servisinin durumunu kontrol etmek için aşağıdaki komutu girin:
|
1 |
sudo systemctl status mysql.service |
Aşağıdaki ekran görüntüsündekine benzer bir çıktı almalısınız:

MySQL servisini devre dışı bırakmak için aşağıdaki komutu girin:
|
1 |
sudo systemctl disable mysql.service |
Çıktı, MySQL servisine giden sembolik bağlantıların Systemd'den kaldırıldığını gösterir:

Aşağıdaki komutu girerek servisin Systemd init sistemi ile etkinleştirilip etkinleştirilmediğini test edebilirsiniz:
|
1 |
sudo systemctl is-enabled mysql.service |
Çıktı, devre dışı bırakıldığını gösterecektir. Sisteminizi yeniden başlatırsanız, MySQL açılışta başlamayacaktır:
![]()
Aşağıdaki komutu girerek servisi etkinleştirin:
|
1 |
sudo systemctl enable mysql.service |
Çıktı, Systemd init içinde oluşturulan MySQL servisine giden sembolik bağlantıyı gösterir:

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:
|
1 |
sudo nano /etc/systemd/system/multi-user.target.wants/mysql.service |
Çıktı şuna benzer:

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:
|
1 |
sudo systemctl status mysql.service |
Durum kontrol komutu bir işlem kimliği görüntüler, bizim durumumuzda bu 3555'tir:

İşlemi sonlandırmak için aşağıdaki komutu girin. Bunu sunucunuzda aldığınız işlem kimliği ile değiştirin:
|
1 |
sudo kill -9 3555 |
Durumu kontrol etmek için aşağıdaki komutu girin:
|
1 |
sudo systemctl status mysql.service |
Çı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:

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!
Yorumlar
Henüz yorum yapılmamış. İlk siz olun.