2010-12-14 2 views
5

Dowolna sesja, od której zaczynam od "-d -m", nie akceptuje poleceń "-X stuff [...]", o ile nie zostałem dołączony do ekranu co najmniej raz. Nie ma komunikatu o błędzie, polecenia po prostu się nie przedostają.Jak wysłać komendy dotyczące rzeczy do ekranu początkowego w odłączonym?

Problem polega na tym, że uruchamiam sesję z zadania cron i nie jestem w stanie dołączyć do ekranu z poziomu crona.

kroki do powtórzenia

$ screen -m -d -S mydaemon bash 
$ screen -S mydaemon -X stuff "`printf "exit\\r"`" 
$ screen -ls 
     32456.mydaemon (Detached) 
$ screen -r -S mydaemon 
$ ^a d 
$ screen -S mydaemon -X stuff "`printf "exit\\r"`" 
$ screen -ls 
No Sockets found in /var/run/screen/S-user 

^a d oznacza naciśnięcie klawiszy Ctrl + a następnie naciskając d.

Wersje

CentOS release 5.5 (Final) 
Screen version 4.00.03 (FAU) 23-Oct-06 

Odpowiedz

8

Edycja: Najlepszą odpowiedzią na to pytanie jest this other SO answer. W każdym razie zostawiam tutaj moje kludgey rozwiązanie, na wypadek gdyby to zainspirowało rozwiązanie podobnego problemu.


Możliwym rozwiązaniem jest użycie drugiego, już działa i indywidualny sesja ekran, aby rozpocząć sesję screen, do których chcesz wysłać polecenie „rzeczy” w załączonym trybie, a następnie wysłać tej sesji przeszukiwania odłączenia polecenie, a następnie polecenie stuff.

$ screen -dmS spawner 
$ screen -S spawner -X screen screen -dR mydaemon 
$ sleep 1 # may be necessary 
$ screen -S mydaemon -X detach 
$ screen -S mydaemon -X stuff "whatever" 

(Uwaga: „Ekran” podwoiła się nie literówka!) Teraz pozostało z sesji unstuffable ekranu (spawner), ale jeśli tych zasobów, które zajmuje ważne są zawsze możesz po prostu użyć „kill -TERM ...”lub jej podobni, aby ją zakończyć (lub mają go automatycznie wyjście po pewnym czasie poprzez uruchomienie go z czymś jak

$ screen -dmS spawner bash -c "sleep 60" 

lub podobnym).

+0

Bardzo dziękuję, jesteś niesamowity –

+1

Dziękuję za zachętę. Zapomniałem, że odkryłem że Musiałem dodać krótki sen po utworzeniu sesji screen i jej oderwaniu przez -X, aby zapobiec wyścigowi. Odpowiedź została zmieniona, aby to odzwierciedlić. –

0

Czy bierzesz za pomocą tmux zamiast? Jest znacznie bardziej odpowiedni do zadań nieinteraktywnych.

+0

I obecnie nie mają tmux zainstalowany, ale mogę na nią patrzeć. Czy istnieje przewodnik lub puszka podajesz przykład tego, czego potrzebuję? –

+0

'man tmux' prawie wszystko pokrywa, ale to powinno być prawie identyczne z tym, co chcesz: http://blog.hawkhost.com/2010/07/02/tmux-% E2% 80% 93-terminal-multiplekser-część-2/# skrypt powłoki-shell –

-1

Za pomocą pliku .screenrc można ustawić rzeczy do uruchomienia;

screen -t <title> <window position> <command> 

Tak więc, jeśli chcesz rozpocząć top w oknie 7, że zrobisz

screen -t window7top 7 top 
+0

Twoja odpowiedź nie ma zastosowania –

0

Dzięki za Ron Kaminsky.

Znalazłem inny sposób, aby zabić screen 'spawner'

$ screen -dmS spawner 
    $ screen -S spawner -X screen screen -dR mydaemon 
    $ sleep 1 # may be necessary 
    $ screen -S mydaemon -X detach 

i dodaj poniżej linii

$ screen -S mydaemon -X screen screen -S spawner -dR 
    $ sleep 1 # may be necessary 
    $ screen -S spawner -X detach 
    $ screen -S spawner -X kill 
+0

W każdym razie nie mogę dodać komentarza do innego gościa. co się ze mną stało. :( –

0

ekran -d -m/bin/bash „test.sh”

ekran (wolnostojący) (telefon) (shell) "Co do wykonania"

$ screen -d -m /bin/bash "test.sh" 
$ screen -li 
There is a screen on: 
     8540..Satelite (10/17/2013 04:53:22 AM)  (Detached) 
1 Socket in /var/run/screen/S-matt. 
Powiązane problemy