Bir süreç nasıl denetlenir ve otomatik olarak yeniden başlatılır?


34

Çökmesi durumunda yeniden başlatılacak bir işlem olmasını istiyorum. Biraz googled ve kolay bir çözüm daemontools kullanmak olduğunu öğrendim .

Nasıl yapılandıracağımı anlamadım.

  1. Böyle bir işlevselliği gerçekleştirmenin en kolay yolu nedir?
  2. Yapılandırma nasıl yapılır?

Yanıtlar:


29

Bu cevap Upstart ile Ubuntu sürümleri için geçerlidir (<= 14.10). Systemd (> = 15.04) sürümleri için başka bir yaklaşım kullanın.

Ubuntu'da zaten Upstart ile sağlanan bir işlevsellik aradığınız görülüyor . respawnKonfigürasyonda dörtlük tam olarak neye ihtiyacınız yapacağız. Bununla başa çıkmak için daha az standart bir yol kullanılmasını tavsiye ederim.

Yönetmeye çalıştığınız işlem hakkında daha fazla ayrıntı olmadan, yapılandırmanın nasıl görünmesi gerektiğini söylemek zor. Örneğin, arka planına kendini çatallayıp koymadığına bağlı. Üzerinde Sonradan görme dokümantasyon respawndörtlük size daha fazla bilgi verecektir.

Ne yazık ki, Kullanıcı İşlerini düzgün çalıştırmak henüz mümkün değil : kullanıcı işini çalıştırmaya başlayamıyor

Örnek

Hesap makinesi uygulamasını ateşle öldürüldüğünde bile çalışmasını sağlamak istediğimizi varsayalım (sinyal 9).

  1. Bir konfigürasyon dosyası oluşturun /etc/init/calculator.conf( bu makaleye göre ):

    #!upstart
    description "Calculator"
    
    # Start job via the daemon control script. Replace "gert" with your username.
    exec su -l gert -c 'export DISPLAY=:0; /usr/bin/gnome-calculator'
    
    # Restart the process if it dies with a signal
    # or exit code not given by the 'normal exit' stanza.
    respawn
    
    # Give up if restart occurs 10 times in 90 seconds.
    respawn limit 10 90
    
  2. Çalıştırarak başlatın

    sudo start calculator
    
  3. Geçerli ekranınızda ( :0) açılır ve kapattıktan sonra yeniden başlatıldığını görerek görkemin tadını çıkarın.

    • İşlem kimliğini tanımlayın, örneğin ps aux | grep calculator:

      gert  13695 0.2 0.4 349744 16460 ?   Sl   13:38   0:00 /usr/bin/gnome-calculator
      
    • Ateşle öldür.

      sudo kill -9 13695
      
    • Yeniden ortaya çıktığını izleyin:

      gert  16059 4.6 0.4 349736 16448 ?   Sl   13:40   0:00 /usr/bin/gnome-calculator
      

Bunun, uygun Kullanıcı İşi desteğiyle Ubuntu 13.04 planları için planlarla daha şık olacağını unutmayın.


Başlamaya çalıştığımda bilinmeyen bir iş buluyorum? Herhangi bir Ideea. Dosyayı / etc / init
opc0de

@ opc0de Dosyanın adı, servicename.confbaşlatılacak komutla eşleşmelidir start servicename. Farklı bir isim seçtiğinden şüpheleniyorum.
gertvdijk

hayır, eşleşiyor ancak örneğinizi izlemedim, bu yüzden sözdizimi hatası alabilirim.
opc0de

@ opc0de Peki, soruda neyi başarmaya çalıştığınız hakkında daha fazla açıklama yaparak başlayın: ne tür bir uygulama / süreç ve örneğin nasıl yürüttüğünüzün yanı sıra mevcut girişiminizle ilgili ayrıntılar.
gertvdijk

Örneğinizle çözüldüm, benim hatam muhtemelen icra tezahüründe bir hatam oldu. Yardımın için teşekkürler!
opc0de

13

Konfigürasyona ihtiyaç duymadan aynı etkiyi yapabilen son derece basit bir araçtır immortal: https://immortal.run/

Sadece bu şekilde komutu çalıştırın:

immortal <cmd>

Arka planda çalışır ve çıkarsa otomatik olarak yeniden başlatılır.

  • immortalctl: Çalışan işlerin durumunu görüntüleyin. Burada nameyazdırılacak bir sütun var, bunu diğer kontrol komutlarıyla birlikte işe başvurmak için kullanabilirsiniz.
  • immortalctl stop <name>: İşi verilen adla izlemeyi durdurur (otomatik olarak yeniden başlatılmaz, ancak geçerli işlem yürütülmeye devam eder)
  • immortalctl -k <name>: SIGKILL'i mevcut işleme gönderir.
  • immortalctl exit <name>: İşi verilen adla izlemeyi durdurur ve iş listesinden kaldırır.

1
Teşekkürler, bu 16.04'teki kullanım davam için harika oldu. Bunu faydalı araçlar çantama koyuyorum.
Quentin Skousen

2
Aslında, bu başlangıç ​​/ yeniden doğuştan daha hafif görünüyor.
Sridhar Sarnobat

Görüntülemek için stdoutve stderrön planda bir yolu var mı ?
David S.,

Birinden haberdar değilim, çünkü genellikle arka planda bir süreci çalıştırmak için kullanılır. Ancak, immortalctl -l out.log <cmd> && tail -f out.logaynı etkiyi elde etmek için kullanabilirsiniz .
extropic motor,

@DavidS. birleştirilmiş bir günlük elde edebilir ya da stdout ve
stderr'e

1

Daemon / service / background işlem işlevselliğine ihtiyacınız yoksa ve bunu konsolda yapmak istiyorsanız, adında bir dosya oluşturun autorestart.sh:

#!/bin/bash

while [ 1 ]; do
  some_command
done

Daha sonra çıkar veya çökerse ./autorestart.shotomatik olarak yeniden başlatılır some_command. CTRL-C döngüyü keser ve programdan temiz bir şekilde çıkar.

Ubuntu 18.04'te test edilmiştir.


0

"Başlatma" olmadan bir yol var. Anahtar kelime "inittab" :-). Bu, genellikle varsayılandan değiştirilmemiş bir dosya olmasına rağmen, SYSV makinelerinde istenen yeniden doğumu elde etmek için kullanılabilir.


Neden birisinin bu çözümü reddettiğini anlamıyorum. Anlamıyorsanız, sadece google; buraya initttab'ın man sayfalarını kesip yapıştırmanız anlamsızdır, bunları sisteminizde kendiniz okuyabilirsiniz! sadece "man inittab" yazın ...
cepal67

13
Yüksek kaliteli cevaplar, "bunu kullan, kendi kendine
Seth

0

ps-watcher, hangi işlemlerin çalıştığını izleyen ve tanımlanmış koşullar üzerinde bir eylem gerçekleştiren bir araçtır. Hadi yükleyelim:

apt-get install ps-watcher

Detaylar için PHP-FPM'ye geri dönüş ile HHVM Koşu alt bölümüne bakın - bu benim için iyi çalıştı.


Çok uzun olmadığından, lütfen makale yerine kodun bir özetini ekleyin, çünkü bu soru için yalnızca çok kısa bir bölüm geçerlidir.
derHugo

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.