Wchodzę ssh
na serwer i uruchamiam skrypt w języku Python, który zajmie około. 24 godziny na ukończenie. Co się stanie, jeśli moje połączenie internetowe umrze w środku? Czy to zatrzyma polecenie?
Czy jest jakiś sposób, aby uruchomić moje długo działające polecenie w taki sposób, że lokalne rozłączenia nie będą miały na niego wpływu i mógłbym nadal widzieć jego dane wyjściowe po ssh
ponownym zalogowaniu ?
screen -r
połączy się ponownie.Możesz także użyć,
disown
jeśli już rozpocząłeś proces bezscreen
lubnohup
źródło
Istniejące odpowiedzi mogą działać dobrze, ale potrzebowałem czegoś dla BusyBox (powłoki i zestawu narzędzi dla minimalnego sprzętu, takiego jak routery domowe). Mój system nie posiada
screen
,dtach
,at
,disown
, lub nawetnohup
! Dzięki tbc0 na SO ( link ) znalazłem ten klejnot. Zwraca natychmiast, ale proces serwera nadal działa:Lub, jeśli potrzebnych jest wiele poleceń:
Wyjaśnienie:
>&-
- zamknąć rączkę stdout2>&-
- zamknij stderr<&-
- zamknij standardowe wejście&
- umieść proces w tleNie używa żadnych zewnętrznych programów i powinien działać w ksh, ash, powłoce Bourne'a, bash itp.
źródło
Jeśli proces w tle zostanie zamknięty i sesja zostanie zamknięta, proces zostanie przyjęty przez init (PID 1).
Jeśli mam sesję i wykonaj:
i otwórz kolejną sesję i uruchom:
Mój proces jest nadal uruchomiony i widzimy, że jego proces nadrzędny ma teraz 1 (init).
Alternatywnie możesz skonfigurować skrypt jak demon. Szybkie wyszukiwanie pokazuje ten pozornie użyteczny link: http://onlamp.com/python/pythoncook2/solution.csp?day=1 . Jeśli chcesz przyjąć to podejście.
źródło