Skrypt Bash, który wykonuje polecenie tylko wtedy, gdy port jest wolny

2

Cześć Mam skrypt bash, który wymaga warunkowego wykonania kilku wierszy kodu w zależności od tego, czy port 80 jest już w użyciu:

sudo git fetch origin;
sudo git checkout master;
sudo git pull;

--- jeśli port 80 jest otwarty

echo Starting Meteor;
export LC_ALL=C;
export ROOT_URL=$ROOT_URL;
sudo meteor --port 80;

--- jeszcze

echo Meteor already running;

Zatem jako wisienka na szczycie, ponieważ Meteor jest procesem długotrwałym, jak mogę uruchomić go w tle i wyjść ze skryptu? (Próbowałem nohup, ale nie mam pojęcia, jaka jest najlepsza praktyka?)

Dzięki wielkie

Alasdair P.
źródło
Czy masz na myśli połączenie z portem 80 lub czy komputer już nasłuchuje na porcie 80?
Daniel Chateau

Odpowiedzi:

4

Możesz użyć:

netstat -ln | grep ": 80"

Jeśli kod powrotu ($?) Wynosi 0, to coś jest na porcie: 80, w przeciwnym razie nie. Na przykład:

netstat -ln | grep ":80 " 2>&1 > /dev/null 
if [ $? -eq 1 ]; then   
     ... your code here 
fi
fede.evol
źródło
+1, ale będziesz chciał grep ':80\>', żebyś nie pasował na przykład do „: 8080”
glenn jackman
A druga część? Jak uzyskać „Twój kod tutaj”, aby działał w tle? po prostu „Twój kod tutaj i”?
Alasdair P
gleen: Po 80 („: 80”) wstawiłem spację, aby nie pasować do 80xx, próbowałem i wydawało się, że działa :)
fede.evol
Alasdair: tak, po prostu umieść &. Jeśli terminal może zostać zamknięty (to znaczy uruchamiasz go ręcznie w powłoce, a następnie zamykasz), to nic może się nie przydać, ponieważ utrzyma proces również w tym przypadku.
fede.evol