Linux Ekranı Kill Challenge


2

İşte oradaki tüm bobinlere meydan okumak. İşte benim sorunum:

2 Script çalıştıran bir Linux makinem var. 1 Komut Dosyası, ikinci komut dosyasını etkileyen komutları çalıştırır. İkinci komut dosyası programları bir döngüde çalıştırır.

Örneğin. Script 1 - script 2'yi durdur      Script 1 - script 2'yi başlat      Bu hizmet Script2 start / service Script2 stop şeklindedir. vb.      * Servis Komut Dosyası2'nin başlatılmasının ikinci komut dosyasıyla yeni bir ayrılmış ekran oluşturduğunu unutmayın.

İkinci komut dosyası şöyle bir döngüde çalışır:

  1. Güncelleme Komut Dosyasını Çalıştır & amp; Bekleyin
  2. İlk Oyunu Çalıştır Bekleyin
  3. İkinci Oyunu Çalıştır Bekleyin

Oyunlar kendi ekranlarında yayınlanma eğilimindedir, yani öldürüldüklerinde ana senaryo değildir. Yani oyun çökerse, Script2 çökmez.

İşte problem burada yatıyor. Sunucuyu durdurmak istediğimde, ilk önce oyunu güvenli bir şekilde öldürmesi gerekiyor. kapanması için zaman tanıyın. Ardından Script2 ekranını öldürün ve döngünün oyuna yeniden başlamasını önleyin.

Herhangi bir öneri?


Çalışıyor veya çalışmıyor diyor ... veya belki de komut dosyalarına devam etmelerini veya çıkmalarını söyleyen başka bir bit. İşiniz bittiğinde sadece çıkış bitini ayarlayın. Şimdi göstermek için vaktiniz yok ama umarım çoktan almışsınızdır.
Sampo Sarrala

@Sampo dosya işini yapmayı düşünüyordu ama biraz fazla görünüyor ve daha basit bir yöntem arıyordu. Ama yorum için teşekkürler.
Skowt

Yanıtlar:


1

Dönmeden önce bazı bayrak türlerini veya sinyalleri kontrol etmek için ikinci betiğinize bir koşullu ifade koymanız gerekir. Bu bayrak veya sinyal varsa, komut dosyanız temiz bir şekilde çıkmalıdır.

Böyle basit bir bayrak / sinyal, bir dosyanın varlığını kontrol etmektir. /var/run/SCRIPTstop veya benzeri. Senaryoyu durdurmak istediğinizde, bir touch SCRIPTstop tüm gereken bu.

Komut dilinize bağlı olarak, kullanarak bir UNIX sinyali gönderebilirsiniz. kill: yani killall -SIGUSR1 $SCRIPTNAME, vb.

İkinci komut dosyanız, başlattıktan sonra dosyanın silinmesini sağlamalıdır ve temiz bir şekilde çıkmadan önce de yapması iyi olur.


Bu komutu çalıştırarak oyunu ikinci komut dosyasında güvenle çıkmayı başardım: screen -S EKRAN ADI -X şeyler 'komut' echo -ne '\003' - Hangi CONTROL-C komutunu güvenle çıkması için oyuna gönderir? Fakat senaryo tekrar devreye giriyor ve tekrar başlıyor ve bu da sorun yaratıyor.
Skowt

Senaryonuzu döngüden önce bir şeyi kontrol etmek için değiştirmediyseniz, (koşullu kullanarak if deyim), orijinal olarak söylediklerinizi yapmaya devam edecek, bu her zaman döngü olacaktır.
LawrenceC

'service Script2 stop' komutu gönderildiğinde oluşturulan bir dosya oluşturmayı başardı. Sonra dosya bulunduğunda betiği öldüren, ancak betiği öldürmeden önce dosyayı kaldıran döngünün başına bir onay eklendi. Olması gerektiği gibi çalışır. Yardım ve rehberlik için teşekkürler! : D
Skowt
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.