2011-06-30 10 views
22

GNU Ekranı, programın çalışması bittiğinde oturumdan çıkmamak için içinde çalışan bir programla nasıl başlatabilir?GNU Ekranını, içinde program çalıştıran oturumdan çıkmayacak şekilde çalışan bir programla nasıl başlatabilirim?

Ekranı el ile başlatırsam ve sonra da bu programı içinde başlatırsam her şey istediğim gibi çalışırsa, etkileşimli bir programı daemon olarak çalıştırmak istiyorum. Program çıkarsa veya çökerse ekran oturumu kalır ve ne olduğunu görmek için ona bakabilirim. Ancak, programı basit bir ekran lansmanıyla başlatırsam, ekranın içinde çalışır, ancak program çıktığında ekran sona erer ve programdan herhangi bir çıktı kaybolur. Bu senaryo için screen –dmS serverName serverApplication

çalışmıyor. &'u çalıştırmak istediğim programı başlatan bir senaryo yapmayı düşünmüştüm, sonra sonsuza kadar uyuyorum, daha sonra senaryoyu ekran ile aynı anda başlatabilirim ve sonradan etkiyi elde etmeliydim ama işler için düzensiz bir yol gibi görünüyor. ve eminim ki daha zarif bir şey olmalı.

Birkaç tane ekran öğreticisi okudum ve adam sayfası üzerinden trol çizdim ama bunu yapmanın doğru yolu olarak bana hiçbir şey atılmıyor. -X'i denedim ama bu ekran komutları için değil, ekran oturumu içinde komutları çalıştırmak için değil ... Herhangi bir öneri çok takdir edilecektir; Scripting'de kullanmak için daha iyi bir araç varsa GNU Screen'den başka bir şey kullanmaktan bile mutluyum ama lütfen bana mümkün olan yerlerde bir örnek verin.

(Not: Bununla yayınlanmaya başlayacak iki şey bir minecraft_server ve mythtv_backend olan Planım bazı yakut/bash komut dizisi ile açılışta bir chron işinden bunlar başlatmak için oldu.)

cevap

26

Önce, sen -X birlikte kullanarak bu kabuğuna ekran en stuff senin komutunu göndermek, Sonra

$ screen -dmS "serverName" 

:

$ screen -S "serverName" -p 0 -X stuff "serverApplication$(printf \\r)" 
'sadece varsayılan kabuk çalışan bir cin ekran oturumu başlatmak isteyeceksiniz

-p-p, bu oturumdaki pencerenin komutunu içerdiği ekrana anlatmak için önemlidir. Bu durumda, tek kullanılabilir pencere, 0, ancak bunu belirtmezseniz, bazı garip nedenlerden dolayı komutunuz hiçbir yere gitmeyecektir. $(printf \\r), bir 'Dönüş' tuş vuruşunu gönderir. Düzenli bir \n kendi yerinde çalışabilir, ancak kabuk bağımlı I've read. Yeni satır karakteri bash'ta çalışmıyor; Bunun için kefil olabilirim.

İşte başka bir harika numara. Eğer bu oturumda içinde başka ekran penceresi olmak için şunları yapabilirsiniz:

$ screen -S "serverName" -X screen 

Şimdi ama -p 1 ile yukarıdaki gibi aynı sözdizimini kullanarak o birine komutları gönderebilirsiniz. Çok eğlenceli.

+0

-p parametresi işe yarayacaksa harika olacak! Daha sonra deneyeceğim. Ekrandaki uzun süredir devam eden bir hata olduğunu gösteren bu ekran geliştirme sitesi https://savannah.gnu.org/bugs/index.php?10074 ile ilgili bazı ayrıntılar buldum; henüz hazır :-( – TafT

+3

Bunu basit bir durumda denedim ve malzeme ekranı komutu gerekli görünmüyor. exec '-p 0' parametresiyle iyi çalışıyor ve $ (printf) görmediğim anlamına geliyor \\ r) Yürütülecek bir komut dosyası almak için '$ screen -dmS" serverName " $ screen -S" serverName "-p 0 -X exec severApplication' – TafT

+1

Harika!Başka bir yöntem duymak güzel. exec, $ (printf \\ r) 'den hatırlamak kesinlikle kolay! :) – Eric

İlgili konular