Genellikle kendiliğinden hizmet çökmeleri olur. Kullanıcı manuel kurtarma ile uğraşmak zorundadır. Eğer bu bir ev bilgisayarında oluyorsa, böyle bir sorun yoktur. Daha da fazlası - bu iyidir, çünkü hizmetin durumunu belirlemek, hataları tespit etmek ve bunları ortadan kaldırmak için gerçek bir fırsat vardır. Ancak bir web sitesine veya uygulamaya erişim sağlamak için sürekli çalışması gereken sunucular ve VPS hizmetleri söz konusu olduğunda durum oldukça farklıdır. Bu makalede, Linux hizmetlerinin otomatik olarak yeniden başlatılmasını çeşitli şekillerde nasıl yapılandıracağımızı inceleyeceğiz: cron ve systemd aracılığıyla periyodik olarak çalıştırılan bir izleme betiği ile.
Varsayılan ayar, Systemd'nin çökmesi durumunda hizmetle hiçbir şey yapmamasıdır. Ancak kullanıcı her zaman ayarları, hizmetin çökmesi veya durdurulması durumunda hizmetin otomatik olarak yeniden başlatılacağı şekilde yapılandırabilir. Bu amaçla, Servis bölümüne eklenmesi gereken Yeniden Başlat yönergesi kullanılır. Şimdi, Apache servisinin otomatik olarak yeniden başlatılmasını yapılandıran bir örneğe bakalım:
$ sudo systemctl edit apache2
[Service]
Restart=on-failure
RestartSec=5s
Burada RestartSec, hizmeti yeniden başlatmadan önce ne kadar süre bekleneceğini belirtir. İşiniz bittiğinde, değişiklikleri kaydedin ve yapılandırmayı yeniden okumak için daemon-reload komutunu çalıştırın:
$ sudo systemctl daemon-reload
Ardından, her şeyin düzgün çalışıp çalışmadığını kontrol etmek için sürecin durumuna bakın, süreci bir kill sinyali ile sonlandırın:
$ sudo systemctl status apache2
$ kill -KILL 32091
Durumu tekrar kontrol edin, süreç çalışıyor olmalıdır. Başlatma işlemini her seferinde çalışacak şekilde ayarlamak için özel bir Restart: always yönergesi kullanın. Ancak bunu kullanırken çok dikkatli olmalısınız, çünkü gerekli olsa bile süreci sonlandırmanıza izin vermeyecektir. Süreç sürekli olarak çöküyorsa, yeniden başlatılması için, Hizmet bölümüne yeniden başlatma sayısına bir sınır ekleyebilirsiniz:
$ sudo systemctl edit apache2
[Service]
StartLimitIntervalSec=500
StartLimitBurst=5
Restart=on-failure
RestartSec=5s
Burada StartLimitBurst
ve StartLimitIntervalSec
, hizmetin beş kez yeniden başlatılmasının ve bu beş kez de çökerse, onu kendi haline bırakmanın ve dokunmamanın önemini belirtir. İkinci yönerge hizmet yeniden başlatmalarını 500 saniye ile sınırlar.
Bu muhtemelen Linux'un tüm sürümlerinde çalışan en güvenilir ve hatasız yöntemdir. Apache'de bir betik kullanarak otomatik yeniden başlatma oluşturmak kolaydır. Bunu yapmak için şu komutu girmeniz gerekir:
$ sudo vi /usr/local/bin/apache-monitor.sh
#!/bin/bash
ps -A | grep apache2 || systemctl start apache2
Dosyayı kaydedin ve çalıştırılabilir hale getirdiğinizden emin olun:
chmod ugo+x /usr/local/bin/apache-monitor.sh
Betiği periyodik olarak çalıştırmak için bir cron girdisi eklemeyi unutmayın:
$ sudo crontab -e
*/5 * * * * /usr/local/bin/apache-monitor.sh
İşte bu kadar. Evet, hizmetin otomatik olarak yeniden başlatılmasını ayarlamak ilk bakışta göründüğü kadar kolay değildir. Ancak bu önemli bir yetenektir, bu yüzden buna dikkat etmelisiniz - kesinlikle buna değer.
Apply the discount by inserting the promo code in the special field at checkout:
Apply the discount by inserting the promo code in the special field at checkout: