Ekranda bir komut nasıl yürütülür ve çıkarılır?


75

Bir komutu yürütmek ve ardından ayırmak için ekranı nasıl açabilirim (Yani, başlangıçta komut dosyasını başlatmanın ötesinde başka bir giriş yapmadan otomatik olarak tek bir komut dosyasında). örneğin, myscript.sh dosyasını çalıştırıyorum ve otomatik olarak bir ekran oturumu başlatıyor, bir komutu yürütüyor, sonra ayrılıyor.

Yanıtlar:


114

Bu kolay bir tane:

screen -d -m yourcommand

4
nafile. screen -d -m komutu, screen-list yuva yok diyor, screen -r oturum yok
darkfeline

1
Bir şekilde emriniz bulunamadı veya otomatik olarak oluşturulan ekran ortamında doğru çalışmıyor. Sadece ve screen yourcommandyapmadan deneyin ve bunun önce nasıl gittiğini görmek. -d-m
Alan Curry

Haklısın. Beklentilerimin aksine, komut bittiğinde ekran sonlanıyor. Ama cevabın işe yarıyor.
darkfeline

3
zombieEkrandaki seçeneği etkinleştirerek bunu değiştirebilirsiniz . Put zombie xySepetinde ~/.screenrc. Bunu sadece bir oturum için b zombie xybaşka bir dosyaya koyarak ve kullanarak b kullanarak mümkün kılmak mümkün olmalıdır, -c fileancak denememde işe yaramaz. Ya da sadece kullanınsh -c 'yourcommand;while :;do sleep 9999; done'
Alan Curry

@AlanCurry, Hayır, bu komut benim için de geçerli değil, komut mükemmel bir şekilde çalışıyor olsa da (ve birkaç saat sürer) bir ekranda manuel olarak çalıştırıldığında.
Cerin

47

Ekranda tek bir komut çalıştırmak ve ayırmak için deneyebilirsiniz:

screen -dm sleep 10

Birden çok komut çalıştırmak için şunu deneyin:

screen -dm bash -c "sleep 10; myscript.sh"

Bir program sona erdiğinde, ekranın (varsayılan olarak) onu içeren pencereyi öldürdüğünü unutmayın.

Komut tamamlandıktan sonra oturumunuzun ölmesini istemiyorsanız exec sh, sonuna ekleyin , örneğin:

screen -dm bash -c 'sleep 5; exec sh'

Tüm oturumlarınızı listelemek için şunu deneyin:

screen -list

İlgili: Unix ekranını başlat, Çalıştır komutu, Ayır .


2
Bu benim için Ubuntu 16.04'te çalıştı. Daha sonra yeniden dönebilirsiniz böylece oturumu isim yanı sıra, ekleyin -S sessionname: screen -dmS MyLongRunningScript bash -c "...".
Dan Dascalescu

16

'Uykulu' adıyla arka planda yeni oturum başlatmak için

screen -S sleepy -dm sleep 60

'Uykulu' oturumu öldürmek için

screen -S sleepy -X quit      

neden böyle çalışmıyor screen -S sleepy -dm "cd myfolder;sleep 60"?
Araç Seti

@Toolkit Sorun, komutun tırnak içinde olması ve böylece büyük bir komut olarak kabul edilmesidir. Açıkçası, noktalı virgül nedeniyle alıntılardan alamıyoruz. Bunu çözmek için, aşağıdaki gibi komutu yürütün: ekran -S uykulu -dm bash -c "cd myfolder; uyku 60"
Jason Thompson

3
screen -dmS screen_session_name bash -c 'echo "doing stuff"; exec bash'

0

programımdan çıkmak için c (sig int) kontrol düğmesine bastığımda başıma geliyor. bütün bashtan sonuna kadar çıkar. SIGINT'i yakalamak için bunu buldum. ve son bash'tan çıkmayı önle. (çıkmak için exit yazmanız gerekir)

screen -dmS "screenNameHere" bash -c "trap 'echo gotsigint' INT; cd /mydir ; my_command_here;  bash"


example:

screen -dmS "status_updates" bash -c "trap 'echo gotsigint' INT; cd /opt/status_update ; forever index.js ;  bash"

Başlangıçta nodejs programlarını çalıştırmak için cron kullanmayı faydalı buluyorum. ve ekranı önyükleme zamanında çalıştırmak için. cron'da özel olaylar sözdizimi var @reboot olayı

to edit cron, execute:
crontab -e

then type
@reboot screen -dmS "screenNameHere" bash -c "trap 'echo gotsigint' INT; cd /mydir ; my_command_here;  bash"
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.