PuTTY lub OTHER - Kontynuuj wykonywanie polecenia nawet po wyjściu z PuTTY [duplikat]

13

Mam kilka poleceń, które muszę uruchomić. Te polecenia muszą być uruchamiane nawet po wyjściu z interfejsu. Kiedy mam dostęp do GUI Linuksa, wykonuję coś takiego:

cd /home/testuser/Scripts*
xterm -hold -T "Background_Script1" -e  "service1-start.sh" &
sleep 10
xterm -hold -T "Background_Script2" -e "service2-start.sh" &

Każda pomoc będzie mile widziana.

użytkownik3331952
źródło
Czy jest jakiś powód, dla którego nie korzystasz z tych usług jako demonów?
SevenSidedDie
Czy polecenia mają być usługami, które powinny działać prawie na 100% bez przerwy „na zawsze”, czy też długo działającym zadaniem przetwarzania, które powinno zakończyć się po pewnym czasie? Wszystkie odpowiedzi będą „działać” w obu przypadkach, ale właściwa rekomendacja będzie inna.
Peteris,
Jakiej konkretnej dystrybucji systemu Linux używasz? Przekonałem się, że uruchamianie set -m;sprawia, że ​​moje skrypty nadal działają po wylogowaniu z CentOS i RHEL.
ArtOfWarfare

Odpowiedzi:

33

Próbować

nohup Background_ScriptX &

nohup zapewnia, że ​​proces nie zostanie zakończony, gdy terminal zostanie zamknięty. Symbol & wypycha proces na drugi plan.

Mam nadzieję, że to było pomocne.

Eamonn Travers
źródło
nohup zdecydowanie spełnia swoje zadanie
Pitto
Cieszę się, że mogę pomóc.
Eamonn Travers
15
screen ma jedną wyraźną przewagę nad nohupem : nohup nie pozwala ci wrócić do uruchomionego polecenia (np. następnego ranka, aby przeczytać jego standardowe wyjście, a następnie zdecydować się go zabić itp.). ekran pozwala zrobić dokładnie to.
Andreas F
1
nohup wysyła dane wyjściowe do pliku, w którym można je przetworzyć.
Brian Knoblauch,
Dla tych, którzy są nowicjuszami nohup, jest to w zasadzie „brak zawieszenia” - w przypadku nohup HUPsygnał hangup ( ) jest ignorowany.
Dan7119,
20

Jeśli chcesz odczytać wynik później, możesz użyć screen:

screen -d -m my_command

To daje odłączony terminal, do którego możesz podłączyć później ( screen -r), aby odczytać wyjście stdout / stderr.

znak
źródło
2
+1. Po pierwsze, jeśli zamkniesz terminal (np. Kit), a następnie otworzysz go ponownie i ponownie przyłączysz do screen ( screen -r), będziesz mieć także wszystkie dane wyjściowe wyprodukowane przez program, a inaczej „przegapisz”. Dodatkowo ekran może robić tak wiele niesamowitych rzeczy, jak podzielone ekrany itp.! :)
Alberto Santini,
6

Inną opcją, jeśli nohuppolecenie nie jest dostępne, jest użycie polecenia disown .

Najpierw możesz wyświetlić zadania w tle, uruchamiając je jobsw terminalu. Możesz uzyskać numer zadania stamtąd.

Teraz wystarczy uruchomić, disown %[job number]a proces zostanie odłączony od bieżącego terminala i pozostanie przy życiu po wylogowaniu.

Uwaga dodatkowa: Upewnij się, że zadajesz prawidłowe pytanie. Jeśli korzystasz z rzeczywistych usług zgodnie ze wskazówkami w swojej próbce, możesz zastanowić się, jak utworzyć demona w wybranym systemie operacyjnym. Ma to na celu upewnienie się, że proces nadal działa po ponownym uruchomieniu i uczynienie go bardziej spójnym z innymi usługami.

Mam nadzieję że to pomoże.

użytkownik391035
źródło
3

Ponieważ screenzostało wspomniane: istnieją inne multipleksery zaciskowe tam. Bardzo mi się podoba tmux, patrz np. To inne pytanie superużytkownika, tmux vs screen dla porównania.

1k5
źródło