Najlepszą metodą jest rozpoczęcie procesu w terminalowym multiplekserze. Alternatywnie możesz sprawić, że proces nie odbierze sygnału HUP.
Zacisk multiplekser zapewnia „wirtualnych” terminale, które działają niezależnie od „prawdziwego” terminala (właściwie wszystkie terminale są dziś „wirtualne”, ale to inny temat na inny dzień). Wirtualny terminal będzie działał, nawet jeśli twój prawdziwy terminal jest zamknięty sesją ssh.
Wszystkie procesy uruchomione z wirtualnego terminala będą działały z tym wirtualnym terminalem. Po ponownym połączeniu z serwerem możesz ponownie połączyć się z wirtualnym terminalem i wszystko będzie tak, jakby nic się nie wydarzyło, oprócz upływu czasu.
Dwa popularne multipleksery terminalowe to screen i tmux .
Ekran ma stromą krzywą uczenia się. Oto dobry samouczek ze schematami wyjaśniającymi koncepcję: http://www.ibm.com/developerworks/aix/library/au-gnu_screen/
Sygnał HUP (lub SIGHUP) jest wysyłany przez terminal do wszystkich jego procesów potomnych, gdy terminal jest zamknięty. Powszechnym działaniem po otrzymaniu SIGHUP jest zakończenie. Tak więc, gdy twoja sesja ssh zostanie rozłączona, wszystkie twoje procesy zakończą się. Aby tego uniknąć, możesz sprawić, że twoje procesy nie będą otrzymywać SIGHUP.
Dwie proste metody to nohup
i disown
.
Aby uzyskać więcej informacji o tym, jak nohup
i jak disown
działa, przeczytaj to pytanie i odpowiedź: https://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and
Uwaga: chociaż procesy będą nadal działać, nie możesz już z nimi współdziałać, ponieważ nie są one już podłączone do żadnego terminala. Ta metoda jest przydatna głównie w przypadku długotrwałych procesów wsadowych, które po uruchomieniu nie wymagają już żadnych działań ze strony użytkownika.
screen
daje o wiele więcej opcji, ale jeśli używasz,authorized_keys
aby umożliwić ludziom zdalne uruchamianie skryptu za pomocąssh
, tanohup
opcja jest przyjemnym prostym sposobem na uruchomienie przez skrypt procesów trwających dłużej niżssh
sesja, przy której je uruchomiono. .Można to zrobić na kilka sposobów, ale najbardziej przydatny jest ekran GNU .
Po włączeniu się uruchom
screen
. Spowoduje to uruchomienie kolejnej powłoki działającej na ekranie. Uruchom polecenie, a następnie wykonaj polecenie Ctrl- a d.Spowoduje to „odłączenie” cię od sesji ekranowej. W tym momencie możesz się wylogować lub zrobić cokolwiek innego.
Jeśli chcesz ponownie połączyć się z sesją ekranową, po prostu uruchom
screen -RD
polecenie powłoki (jako ten sam użytkownik, który utworzył sesję).źródło
W
bash
Thedisown
kluczowe doskonale nadaje się do tego. Najpierw uruchom proces w tle (użyj&
lub^Z
wpiszbg
):Po wpisaniu
jobs
możesz zobaczyć, że proces jest nadal własnością powłoki:Jeśli wylogujesz się w tym momencie, zadanie w tle również zostanie zabite. Jednak jeśli uruchomisz
disown
, bash odłączy zadanie i pozwoli mu kontynuować:Możesz to potwierdzić:
Możesz nawet łączyć
&
idisown
na tej samej linii, na przykład:nohup
Moim zdaniem jest to lepsze niż uruchamianie, ponieważ nie pozostawianohup.out
plików zaśmieconych w całym systemie plików. Ponadtonohup
należy go uruchomić przed uruchomieniem polecenia -disown
można go użyć, jeśli później zdecydujesz, że chcesz ustawić tło w tle i odłączyć zadanie.źródło
To zrobi narzędzie nohup, dostępne w większości Linuksów.
źródło
Żeby być dokładnym, zwrócę uwagę na tmux , który ma taki sam podstawowy pomysł jak screen:
Wyszukiwanie jest jednak w przybliżeniu nieskończenie łatwiejsze w Google.
źródło
"gnu screen"
jako zapytania wyszukiwania działa całkiem dobrze.Screen to przesada, aby procesy działały podczas wylogowania.
Spróbuj dtach :
źródło
Oto sposób na demonizację dowolnego procesu powłoki, bez potrzeby używania zewnętrznych programów:
Po zamknięciu sesji zadanie będzie nadal działać, o czym świadczy plik output.txt (który ma buforowanie, więc wyświetlenie wartości niezerowej zajmuje trochę czasu). Nie zapomnij zabić swojej pracy po testach.
Więc wszystko, co musisz zrobić, to blisko stdin i tło pracy. Aby być naprawdę dobrym, po pierwsze
cd /
, abyś nie trzymał się wierzchowca.Działa to nawet w prostym sh w systemie Solaris.
źródło
-
operator? Jaka jest różnica między< /dev/null
i&-
? Myślę, że STDIN (i innym STDOUT i STDERR) można przypisać albo plik< file
, albo strumień przez<& stream
w przypadku STDIN. Czy tak samo byłoby< /dev/null
w powyższym przykładzie? I czy-
powyższy operator odnosi się do wartości null jako strumienia?at
Polecenie może być przydatne do tego rodzaju sytuacji. Na przykład wpisz:Następnie możesz wprowadzić polecenie lub serię poleceń, które zostaną uruchomione. Wyniki należy przesłać pocztą e-mail, jeśli wiadomość e-mail jest poprawnie skonfigurowana w urządzeniu.
Zamiast tego
now
możesz opcjonalnie określić czas z datą lub wyrażeniem czasu, takim jaknow + 15 minutes
. Zobaczman at
po więcej szczegółów.źródło
byobu
na Ubuntu to przyjemny front-end do ekranu. Naciśnięcie Ctrl- ?wyświetla listę wszystkich skrótów klawiaturowych. Dodaje pasek stanu, który może być przydatny do obserwowania obciążenia procesora, miejsca na dysku itp. Ogólnie zapewnia doświadczenie, które opisałbym jako połączenie VNC oparte na terminalu.nohup
pozwala na uruchomienie zadania w tle, którego dane wyjściowe są kierowane do pliku dziennika, który zawsze można przekierować do / dev / null, jeśli nie jest to wymagane.źródło