Skip navigation

Monthly Archives: October 2013

Ostatnio natknąłem się na problem z uruchamianiem przez SSH skryptów, które startują procesy w tle. Skrypt uruchamiany lokalnie działał poprawnie a zdalnie przez ssh ‘wisiał’. Okazuje się że problem mozna zasymulować w prosty sposób. Wystarczy napisać prosty skrypt uruchamiający zadanie w tle:

#!/bin/bash
nohup sleep 300 &

Po uruchomieniu tego skryptu przez SSH, klient ssh czeka na zakończenie polecenia sleep.

Udało mi się znaleźć dwa rozwiązania:
– uruchomienie ssh z parametrem -tt (wynika z tego że nohup nie działa poprawnie jeśli skrypt nie jest podpięty do terminala)
– przekierowanie deskryptorów wejścia/wyjścia (również dla błędów).

W naszym niesamowicie skomplikowanym skrypcie można to zrobić np. tak:

#!/bin/bash
exec >/dev/null /tmp/error.log
nohup sleep 300 &