Uruchom skrypt na ekranie

25

Chcę uruchomić skrypt bash na odłączonym ekranie. Skrypt wywołuje program kilka razy, z których każdy trwa zbyt długo, aby czekać. Moją pierwszą myślą było po prostu otwarcie ekranu, a następnie wywołanie skryptu, ale wygląda na to, że nie mogę się odłączyć (przez ctrl-a d) podczas działania skryptu. Przeprowadziłem więc badania i znalazłem tę instrukcję, aby zastąpić shebang następującymi:

#!/usr/bin/screen -d -m -S screenName /bin/bash

Ale to też nie działa (opcje nie są rozpoznawane). Jakieś sugestie?

PS Teraz przychodzi mi do głowy, screen -dmS name ./script.shże prawdopodobnie zadziałałoby to dla moich celów, ale wciąż jestem ciekawy, jak włączyć to do skryptu. Dziękuję Ci.

bongbang
źródło

Odpowiedzi:

28

Linia shebang , którą widziałeś, może działać na niektórych wariantach uniksowych, ale nie na Linuksie. Linuksowe linie linuksowe są ograniczone: możesz mieć tylko jedną opcję. Cały ciąg -d -m -S screenName /bin/bashjest przekazywany jako pojedyncza opcja screen, zamiast być przekazywany jako różne słowa.

Jeśli chcesz uruchomić skrypt na ekranie i nie zadzierać z wieloma plikami lub cytatami, możesz ustawić skrypt jako skrypt powłoki, który wywołuje screen, jeśli nie jest już wewnątrz ekranu.

#!/bin/sh
if [ -z "$STY" ]; then exec screen -dm -S screenName /bin/bash "$0"; fi
do_stuff
more_stuff
Gilles „SO- przestań być zły”
źródło
Działa dobrze, po co "$0"tu jest?
Fabich,
4
@Lordofdark To jest nazwa skryptu. Skrypt wywołuje, screenktóry wywołuje, /bin/bashktóry ponownie wywołuje skrypt.
Gilles „SO- przestań być zły”
16

Według stron podręcznika ekranowego:

  • screen -d -m Ekran startowy w trybie odłączonym. To tworzy nową sesję, ale się do niej nie dołącza. Jest to przydatne w skryptach uruchamiania systemu.
  • -S sessionname Ustaw nazwę nowej sesji na sessionname.

Kiedy uruchomiłem polecenie, które podałeś: screen -dmS name ./script.sh

Screen uruchamia okno o nazwie name i automatycznie uruchamia ten skrypt.sh. Aby wrócić tam i zobaczyć status, wystarczy wpisać:screen -r test

Teraz w Ubuntu 14.04 polecenia są nieco inne. Próbować:

screen -d -m -S test

Teraz, aby uruchomić skrypt, musisz przejść do pliku konfiguracyjnego, aby to zrobić:

sudo vim /etc/screenrc

Tam przewiń w dół, a zobaczysz:

# Example of automatically running some programs in windows on screen startup.
#
#   The following will open top in the first window, an ssh session to monkey
#   in the next window, and then open mutt and tail in windows 8 and 9
#   respectively.
#
# screen top
# screen -t monkey ssh monkey
# screen -t mail 8 mutt
# screen -t daemon 9 tail -f /var/log/daemon.log

To jest sekcja, w której będziesz musiał dodać nazwę skryptu, aby uruchomić, co powinno pozwolić ci zrobić wszystko, czego potrzebujesz z ekranu.

ryekayo
źródło
Jakoś to polecenie ( screen -dmS ...) nie działa dla mnie, nawet jeśli naprawdę powinno. Uruchomię go, a następnie screen -lsnie zostaną znalezione gniazda. Myśli?
bongbang
Jakiej dystrybucji używasz?
ryekayo
NAME = „WERSJA Ubuntu” = „14.04.1 LTS, Trusty Tahr” Myślę, że. To maszyna wirtualna.
bongbang
Daj mi trochę, bo właśnie wychodzę z pracy i źle próbuję użyć ekranu na mojej maszynie, która jest również Ubuntu 14.04
Ryekayo 14'14
@bongbang - jaką wersję ekranu posiadasz?
slm
3

To jest trochę stare, ale jeden z niewielu wątków, które mogłem znaleźć, aby to zrobić. Po zabawie arount jedynym sposobem, aby uruchomić to w trybie odłączonym z Ubuntu 14. jest

screen -d -m -t nameofwindow sh nameoflaunch.sh

Uruchomienie będzie drugą częścią powyżej, która zawiera bieżące polecenia Java i wersję serwera. Prowadzę wanilię.

ProjectEd
źródło