Mam dwa polecenia cmd1 i cmd2. Spośród nich cmd2 kończy się dłużej. Musisz uruchomić cmd2, a następnie cmd1.
Próbowałem uruchomić je w następujący sposób:
bash$ (nohup ./cmd2>result2 &) && nohup ./cmd1>result1 &
lub
bash$ (nohup ./cmd2>result2 &) ; nohup ./cmd1>result1 &
Ale za każdym razem widzę, że cmd1 nie czeka na zakończenie cmd2 i wynik1 zostanie zapełniony.
Jak sprawić, by cmd1 działał po cmd2, kiedy oba powinny być procesem nohup i działać w tle?
shell
process
background-process
nohup
użytkownik33767
źródło
źródło
Odpowiedzi:
Wykonałeś oba
cmd1
icmd2
biegniesz równolegle. Powiedziałeś: „Uruchom cmd2 w tle i zerwij wszelkie powiązania z nim. Uruchom cmd1 w tle i zerwij z nim wszelkie skojarzenia. ” Miałeś na myśli: „Uruchom cmd2 w tle; po zakończeniu uruchom cmd1 (również w tle). ” Ponieważ nie ma już żadnego powiązania z zadaniem w tle, musisz opracować zadanie w tle, które wykonuje cmd2, a następnie cmd1. Jest tocmd2; cmd1
(a raczejcmd2 && cmd1
uruchomienie cmd1 tylko wtedy, gdy cmd2 się powiedzie), i musisz powiedzieć,nohup
aby uruchomić powłokę działającą w tle.źródło
Jeśli nie masz nic przeciwko nieużywaniu nohup:
źródło
Po prostu użyj:
źródło
daj nam znać, co dokładnie robisz z cmd2 i cmd1. Zależy to od rodzaju zadania i wyniku, jaki chcesz uzyskać od polecenia. Jeśli napotykasz problem z dwukrotnym naciśnięciem klawisza Enter z poleceniem, może to zrozumieć mój post
możesz także przejść tą drogą
Zobacz poniższy zrzut ekranu, tutaj używam 3 poleceń i wszystkie są wykonywane kolejno jeden po drugim. Do tego zadania użyłem backicksa. Na zrzucie ekranu można również obserwować datę i godzinę. polecenie uśpienia ma 60 sekund, dlatego po 60 sekundach moje kolejne polecenie zostanie pomyślnie uruchomione. Użyłem polecenia zadań, aby sprawdzić, czy każde polecenie nadal działa w tle. Tutaj nie. miejsc pracy, które możesz zobaczyć, jest 1.
Ten zrzut ekranu jest dostępny również w tym łączu , jeśli nie jest widoczny
źródło