Arka planda birden fazla nohup komutu çalıştırma


12

İki komut cmd1 ve cmd2 var. İkisinden cmd2'nin bitmesi daha uzun sürer. Cmd2 ve ardından cmd1'i çalıştırmanız gerekir.

Onları aşağıdaki şekilde çalıştırmayı denedim:

bash$ (nohup ./cmd2>result2 &) && nohup ./cmd1>result1 &

veya

bash$ (nohup ./cmd2>result2 &) ; nohup ./cmd1>result1 &

Ama cmd1'in her iki zamanı da cmd2'nin bitmesini beklemediğini ve sonuç1'in doldurulduğunu görüyorum.

Her ikisi de nohup işlemi olmalı ve arka planda çalışacaksa cmd1'i cmd2'den sonra nasıl çalıştırabilirim?



2
Unix.stackexchange.com/questions/67006/… 'deki soru, yürütme düzenimi korumak istediğim için biraz farklı. Diğer soruyu anlama konusunda yanılmışsam lütfen beni düzeltin.
user33767

Yanıtlar:


12

İkisini de yaptınız cmd1ve cmd2paralel koştunuz. Şöyle dediniz: “Arka planda cmd2'yi başlatın ve onunla herhangi bir ilişkiyi kesin. Arka planda cmd1'i başlatın ve onunla herhangi bir ilişkiyi kesin. ” Şunu demek istediniz: “Arka planda cmd2'yi başlatın; tamamlandığında cmd1'i (arka planda da) başlatın. ” Artık arka plan göreviyle herhangi bir ilişki olmadığından, cmd2 sonra cmd1 gerçekleştiren bir arka plan görevi tasarlamanız gerekir. Bu cmd2; cmd1(veya cmd2 && cmd1cmd1'i yalnızca cmd2 başarılı olduğunda çalıştırmak için) ve nohupbunun için arka planda çalışan bir kabuk başlatmayı söylemeniz gerekir .

nohup sh -c './cmd2 >result2 && ./cmd1 >result1' &

Teşekkürler. İyi çalışıyor. Evet, ilk cmd arka plana gittikten sonra, ilk komutun bitmesini beklememize rağmen başlayan ikinci komutu etkilemez. Arka plana komut gönderme ile ilgili kılavuzu okumalıyım.
user33767

3

Nohup kullanmamanın bir sakıncası yoksa:

{ command1 >result1 2>&1 && command2 >result2 2>&1 ; } & disown

Bunu kontrol edeceğim. Ancak şu anda komutun sh ile sarıldığı Giles'in cevabı ile gidecek. Neyse teşekkürler
user33767

Bu kötü bir fikir. Kullanıcı konsoldan çıkış yaptığında oturumu öldürür.
mootmoot

@mootmoot bu amaçlandığı gibi çalışır, bunu kendiniz kontrol edin; üst kabuk çıktığında komutlar SIGHUP almaz.
artyom

Evet, komutu crond / crontab kullanarak çalıştırırsanız kabuk güvenlidir. Ancak pty / xterm / ssh güvenli değildir. unix.stackexchange.com/questions/3886/…
mootmoot

2

Basitçe kullanın:

nohup ./cmd2>result2 & nohup ./cmd1>result1 & nohup ./cmd3>result3 &

Çoklu komutu çalıştırırken iyi, önce cmd2 ve daha sonra cmd1 tam yürütme sırasını korumak istedim ve yukarıdaki komutla gerçekleşmiyor. teşekkürler
user33767

0

cmd2 ve cmd1 ile tam olarak ne yaptığınızı bize bildirin. Bu, komutunuzdan istediğiniz görev ve çıktı türüne bağlıdır. Eğer iki kez vurmakla sorun yaşıyorsanız komut ile anahtarı girin o zaman bu yazı ile çözülebilir

bu şekilde de gidebilirsin

nohup `cmd2 && ccmd1` > Output.out 2> Error.err < /dev/null & 

Aşağıdaki ekran görüntüsüne bakın, Burada 3 komut kullanıyorum ve hepsi seri olarak tek tek yürütülüyor. Bu görev için ters çentikler kullandım. Ekran görüntüsünde tarih zaman damgasını da izleyebilirsiniz. uyku komutu 60 saniyedir, bu nedenle 60 saniye sonra bir sonraki komutum başarıyla çalıştırılır. Hala arka planda çalışan herhangi bir komut olup olmadığını kontrol etmek için jobs komutunu kullandım. İşte hayır. görebileceğiniz işlerin sayısı 1'dir.

nohup-çoklu-komuta

Bu ekran görüntüsü, görünür değilse, bu bağlantıda da mevcuttur

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.