Yükselme süreci neden tekrar devam ediyor?

19

Bir tmux oturumunda bir daemon başlatmak için bir uptart komut dosyası yazdım. İyi çalışıyor ve beklenmedik bir şekilde ölüyorsa işlemi yeniden topluyor, ancak manuel olarak durduramıyorum.

İş (bukkit denir) şu şekilde görünür:

start on filesystem
stop on runlevel [!2345]

respawn
respawn limit 5 30

chdir /home/minecraft/bukkit

expect daemon
kill timeout 30

pre-start script
    test -x /home/minecraft/bukkit/craftbukkit-0.0.1-SNAPSHOT.jar || { stop; exit 0; }
end script

pre-stop script
    tmux send -t bukkit "stop"
    tmux send -t bukkit "Enter"
    sleep 10  # Wait for server to shut down properly
end script

exec tmux new-session -d -s minecraft -n bukkit "sudo -u minecraft -- /home/minecraft/java/jre1.6.0_27/bin/java -Xincgc -Xmx1G -jar /home/minecraft/bukkit/craftbukkit-0.0.1-SNAPSHOT.jar"

stop bukkit yayınladığımda ~ 10 saniye boyunca donar (uyku zamanlayıcısı, sanırım) ve bukkit start/running, process 2391 yazdırır. Hata ayıklamaya başladığımda, ilgili satırları günlükte buldum:

Sep 21 19:14:59 cheftest init: bukkit goal changed from start to stop
Sep 21 19:14:59 cheftest init: bukkit main process (2499) exited normally
Sep 21 19:14:59 cheftest init: bukkit main process ended, respawning
Sep 21 19:14:59 cheftest init: bukkit goal changed from stop to respawn

Neden durma, durması gerektiğinde sürecimi yeniden başlatmaya devam ediyor?

    
sordu passy 21.09.2011 19:20

3 cevap

23

Buradaki zorluk, 'respawn' ile sürecin durmasını söyleyen bir pre-stop betiğiyle birleşiyor. İnit'ten (5):

   respawn
         A service or task with this stanza will be automatically started
         if it should stop abnormally.  All reasons for a service stopping,
         except the stop(8) command itself, are considered abnormal.  Tasks
         may exit with a zero exit status to prevent being respawned.

Sıfır çıkış durumundan çıkıp çıkmamanın yeniden oluşturulup oluşturulmayacağı konusunda belgeler biraz belirsizdir. Bununla birlikte, temel olarak, bir "start-start" hatası buldunuz çünkü hedef 'stop' olduğunda ana süreç, 'respawn' için bir değişikliğe yol açmamalıdır.

Bu hatayı gidermek için, "normal çıkış" ı kullanabilmek için bu işi durdurmanın normal bir yol olduğunu ve yeniden oluşturulmaması gerektiğini söyleyebilmelisiniz.

  normal exit STATUS|SIGNAL...
         Additional exit statuses or even signals may be added, if the
         job process terminates with any of these it will not be considered
         to have failed and will not be respawned.

         normal exit 0 1 TERM HUP

Genel olarak, komutları veren bir ön-durma işlemi yerine, bir sinyal ile (gerekirse "N" ölüm sinyali "nin belirtilmesi) işlemi öldürmek daha sağlam olacaktır; Ancak bu, eğer bir sinyal alındıktan sonra servis temizlemeyi desteklemiyorsa, bu her zaman mümkün değildir.

    
verilen cevap slangasek 21.09.2011 23:18
3

Burada bir başkasının çıkması durumunda, bugüne bir çalışma düzeltme eki gönderdim:

İşte

    
verilen cevap adamel 13.11.2012 20:35
2

Bunun için 1.10 artışında bir düzeltme yayınlandı, şimdi gerçekleşmemeli.

    
verilen cevap cprcrack 18.05.2014 03:46

Etiketlerdeki diğer soruları oku