Jak mogę utrzymać proces przy życiu po zamknięciu sesji kitu?

41

Używam kit do interakcji z serwerem Linux. Rozpocząłem proces przy użyciu szpachli. Proces jest uruchomiony i potrwa 5-6 godzin. Chcę, aby ten proces był kontynuowany po zamknięciu sesji kitu. Jak mogę utrzymać ten proces przy życiu po zamknięciu sesji kitu? Nie chcę cały czas włączać komputera. Czy jest na to sposób?

prakash.panjwani
źródło

Odpowiedzi:

32

Do tego typu rzeczy używam ekranu . Właściwie czasami po prostu zostawiam to na dość długi czas, aby móc wrócić do tego, co robiłem.

ziya
źródło
Proces działa teraz, czy działa dla tego procesu? Pytam, ponieważ proces jest w środku i nie chcę go teraz ponownie uruchamiać
+1 za wzmiankę o moim niekwestionowanym ulubionym narzędziu wiersza poleceń. To klejnot w takich sytuacjach.
Noufal Ibrahim,
@Noufal, całkowicie! @prakash, musisz uruchomić screen, zanim będziesz mógł rozpocząć jakiekolwiek procesy
ziya
Jeśli chcesz połączyć się z kilkoma komputerami, dobrym pomysłem może być uruchomienie kilku ekranów na pierwszym ekranie, więc wystarczy połączyć się z jednym ekranem, aby uzyskać dostęp do wszystkich działających pilotów.
link już nie działa
Malky.Kid
31
^Z
bg %1
disown -h %1

„-H” czyni proces odpornym na SIGHUP po zakończeniu sesji.

Tom Anderson
źródło
3
Pamiętaj, że nie ma sposobu na „odrodzenie” lub „zaadaptowanie” tego procesu - gdy już to zrobisz, nigdy nie będziesz mógł przywrócić go na pierwszy plan. Jeśli proces jest zadaniem wsadowym, które ma na celu utworzenie niektórych plików, nie powinno to mieć znaczenia.
19

Użyj nohuppolecenia. Po prostu przedrostek do polecenia, a daemonizuje je, aby nie zatrzymały się po wylogowaniu / zakończeniu sesji powłoki. Standardowe wyjście będzie domyślnie zapisane w pliku nohup.out. nohup(1)Więcej informacji znajdziesz na stronie podręcznika .

Noufal Ibrahim
źródło
proces jest uruchomiony, czy to działa dla tego procesu? Pytam, ponieważ proces jest w środku i nie chcę go teraz ponownie uruchamiać?
Za późno ... przynajmniej na normalne operacje. Nie byłoby zaskakujące stwierdzenie, że jeśli do procesu dołączasz debugger, a następnie dostosowujesz go odpowiednim zestawem wywołań systemowych, być może możesz umieścić go w tle. Ale nie jest to, co można by polecić - na przykład nie zawracałbym sobie głowy i mam przynajmniej pojęcie o tym, co może być zaangażowane. Masz teraz dwie możliwości ... albo pozostań w kontakcie, dopóki się nie skończy, albo zatrzymaj bieżący proces i zrestartuj nowy, używając nohup.
Jonathan Leffler
1
Jeśli używasz bash (i myślę, że zsh), możesz użyć rozwiązania Toma Andersona i disownprocesu, aby działał nawet po rozłączeniu.
Noufal Ibrahim,
Tak, disown wydaje się być drogą do już uruchomionego zadania. Jest to wykonalne, ponieważ powłoka, która rozpoczęła zadanie, może manipulować potrzebnymi właściwościami.
Jonathan Leffler
5

Rozpocznij proces z nohup "processname" &. Możesz go także odłączyć za pomocą screenlub tmux.

Damir
źródło
3

Powyższe rozwiązania są dość dobrze opisane, jednak żadne z nich nie działało dla MNIE DO ZMIANY również konfiguracji PuTTY, aby:

Włącz utrzymanie TCP (opcja SO_KEEPALIVE)

Nigdzie indziej nie widziałem tego i po prostu znalazłem to metodą prób i błędów.

użytkownik295374
źródło
1

Ctrl + z Wyślij bieżący proces do tła.

Możesz także dodać & na końcu polecenia, aby uruchomić w tle

BarsMonster
źródło
4
Zwykle control-z ustawia proces w stan zawieszonej animacji; polecenie bg umieszcza go w tle. Jednak to również utrzymuje proces przyłączony do terminala, podczas gdy nohup odłącza go od terminala, a zatem pozwala kitowi odłączyć się, a proces przetrwa odłączenie.
Jonathan Leffler
Odkryłem, że użycie „&” do wysłania do tła działa z kitem, ale kiedy łączę się za pomocą ssh bezpośrednio z powłoki, jeśli zamknę połączenie, proces w tle zostanie zabity. Wiesz, dlaczego?
Zardoz89,
0

Jeśli chcesz, aby program zawarty w procesie zawsze lub często działał w tle, możesz go zakodować, aby oddzielał się od terminala sterującego (aby takie zachowanie można było kontrolować za pomocą flagi opcji) i działał w tle.

Jest to oczywiście rozwiązanie długoterminowe, nie dla aktualnie uruchomionego procesu.

mpez0
źródło
0

Możesz użyć &po linku.

Przykład:

[localhost ~ ]# wget http://www.link.com/download/download.zip &
codemania
źródło
Pytanie nie dotyczyło linku, czy masz na myśli dodać &znak po wierszu poleceń?
Danny,
0

Jak utrzymać weblogic po zamknięciu okna kitu:

Proste kroki: po zalogowaniu przez kit wykonaj następujące czynności:

  1. Przejdź do katalogu na serwerze, na którym startWebLogic.shznajduje się polecenie.
  2. Wpisz polecenie screeni naciśnij Enter(otworzy się nowy ekran).
  3. Na nowym ekranie wpisz polecenie uruchomienia ./startWebLogic.sh.
  4. Naciśnij Ctrl+, aa następnie naciśnij d(bez przytrzymywania Ctrl); wrócisz do poprzedniego ekranu.
  5. Jeśli chcesz wrócić do ekranu dziennika serwera, wpisz polecenie screen -r.
Akbar
źródło
0

jeśli proces jest dla nodejs, i może to być twoja intencja, ponieważ pierwotnie opublikowałeś to w stackoverflow. Początkowo sam szukałem tego pytania. Znalazłem pm2 i jest niesamowity. Inne odpowiedzi mogą pomóc w ogólnym kitu, ale jeśli jest on specyficzny dla węzła, jest to zdecydowanie najlepsza odpowiedź, ponieważ jest wbudowany monitoring, a konfiguracja jest po prostu

$ npm install pm2 -g
$ cd yourappdirectory

„PM2 to menedżer procesów produkcyjnych dla aplikacji Node.js z wbudowanym modułem równoważenia obciążenia. Umożliwia utrzymanie aplikacji na zawsze, ponowne ładowanie ich bez przestojów i ułatwianie typowych zadań administracyjnych systemu.

Uruchomienie aplikacji w trybie produkcyjnym jest tak proste, jak: „

$ pm2 start yourappname.js

„za pomocą polecenia„ zapisz, a następnie zamroź ”umożliwiasz procesom autostart przy ponownym uruchomieniu”

$ pm2 save
$ pm2 freeze

do monitorowania jego

$ pm2 monit

i uruchamia się ponownie

$ pm2 restart yourappname

również do bezpośredniego logowania informacji

$ pm2 logs

Teraz mogę łatwo uruchomić dwa okna szpachli zamiast korzystać z mojego okna przeglądarki digialocean (którego nie mogłem przewinąć w górę); Aby uzyskać więcej informacji, zobacz główny github

https://github.com/Unitech/pm2

to niesamowite.

łatwe rozwiązania
źródło
Czy możesz wyjaśnić nieco więcej na temat tego, czym jest pm2 i jakie są wyświetlane polecenia? Proszę nie odpowiadać w komentarzach; edytuj  swoją odpowiedź, aby była jaśniejsza i bardziej kompletna.
G-Man mówi „Przywróć Monikę”
Dodano nieco więcej dokumentacji dla społeczności. Chciałbym znaleźć pm2 lata temu.
łatwe rozwiązania