Soru nohup çoklu sıralı komutlar


İhtiyacım var nohup birbiri ardına iki komut. İkinci komut, ilk komutdan sonra yürütülmelidir. İşte komutlar:

tar -zcf archive.tar.gz.tmp mydir
mv archive.tar.gz.tmp archive.tar.gz

Arka planda koşmak için gereken komutlara ihtiyacım var, ama tabii ki aynı anda değil. İkinci komut, ilk komut tamamlandıktan sonra çalıştırılmalıdır. Bunu denedim:

nohup tar -zcf archive.tar.gz.tmp mydir ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1 &

ancak komutlar arka planda çalışmaz. Bash istemi, başka bir komut istemeden önce iki komutun tamamlanmasını bekler. Arka planda koşmaları için onlara ihtiyacım var.

Eğer yaparsam:

nohup tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 &

Bu arka planda mükemmel çalışır. Sadece bir komuttan daha fazlasını yapmaya çalışıyorum.

Ben de denedim:

nohup tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 & ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1 &

Ama bu da işe yaramadı. Geçersiz sözdizimi veya bir şey. Eminim bunu yapmanın bir yolu var ama ben sadece sözdizimi emin değilim.

Düşünebildiğim tek alternatif, komutları .sh dosya ve nohup bu dosya, ancak bu linux sistemi üzerinde yapmam gereken bir şey değil ki bunu uygulamak zorundayım (ayrıcalıklar sınırlamalar vb).


7
2017-08-24 16:53


Menşei


Bunun eski bir soru olduğunu biliyorum. Seçilen nohup çözümden bağımsız olarak iki komutla birlikte && yerine ; Böylece ikinci komut sadece ilk başarılıysa çalıştırılır (&& belirli bir bash komutudur). - Martin Hennings


Cevaplar:


En kolay çözüm: ile bir kabuk komut dosyası oluşturun.

 #/bin/sh
 tar -zcf archive.tar.gz.tmp mydir
 mv archive.tar.gz.tmp archive.tar.gz

Ve kullan nohup myscript. Muhtemelen senaryoda bazı ek belgelerle.

(Evet, dokümantasyon için bir emici oldum. Özellikle birden fazla kişiyle çalışırken veya bir gün işten ayrıldığınızda ve ardılınızın nedenini anlamaya ihtiyaç duyduğunda ".)


Bir alternatif, bir alt görev için yeni bir kabuk başlatmak olabilir (bu durumda katranınız ve hareketiniz)

nohup `$ (tar -zcf archive.tar.gz.tmp mydir; mv archive.tar.gz.tmp archive.tar.gz)


Alternatif 2:

nohup `` `tar -zcf archive.tar.gz.tmp mydir; mv archive.tar.gz.tmp archive.tar.gz```.

Aslında senaryoyu tercih ederim. Siz ya da bir başkası birkaç yıl içinde senaryoyu görüntülediğinde ve bunun neden bu şekilde yapıldığını merak ettiğinde, yorumlarınız oldukça yararlı olabilir.

İlgisiz bir notta: İçinde bir backtick ile anser nasıl gönderirim? (Bu komutu kullanmak için bir kabuk için komut; çıktıyı girdi olarak başka bir komutla besle).


4
2017-08-24 17:08



İyi uygulama, kullanmanız gerektiğini dikte eder. $() Yine de, geri-keneler yerine. Ama sonra bu benim cevabımla aynı olurdu. - Aaron Copley
aslında backticks ifadenin içindeki sonucu değerlendirmek için çalışacaktır -, bu yüzden komutlara bağlı olarak, bu çalışmayabilir. - Michael
alternatif 2 işe yaramaz: mkdir testdir touch testdir / testfile sonra nohup çalıştırın cd ; cd testdir; ls dönüş, "testfile" komutunu çalıştıramadı ...
"succor", sıkıntılı olanı rahatlatmak ve burada tamamen uygun görünmemek gibi çok ihtiyaç duyulan bir yardım anlamına gelir. Muhtemelen, “ingilizce için en iyisiyim” genel İngilizceyi kastettiniz. - Jonathan Hartley


Bence parantezlere ihtiyacın var.

nohup $(tar -zcf archive.tar.gz.tmp mydir; mv archive.tar.gz.tmp archive.tar.gz) >/dev/null 2>&1 &


2
2017-08-24 17:01



Komut istemine dönmeden önce her iki komut da tamamlanana kadar bekler. - Jake Wilson
Kabuk nedir? Bash’de derhal bir telefon alıyorum. final & tüm işi arka planlar. - Aaron Copley
Enter tuşuna bas. Bir istemi al. - Aaron Copley
Ah evet tamam, bash kabuğunda doğru koşuyor. PHP ile çalıştırmayı denedim exec() komut ama ikinci komutun çalışması için bekler. Garip bir şekilde tek bir komut yaparsam, beklendiği gibi davranır ... - Jake Wilson
@Jakobud: nohup php exec () örneği php kılavuzundadır php.net/manual/en/function.exec.php ve bu referanslar stackoverflow.com/questions/3748432/... - Iain


Belki bir bash şal?

nohup bash -c 'tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1' &

1
2017-08-24 17:16





Kullanabilirsiniz screen Komutları vermek ve ekran oturumundan çıkarmak için:

screen
tar -zcf archive.tar.gz.tmp mydir && mv archive.tar.gz.tmp archive.tar.gz
ctrl-a d to detach

Komutlar nohup ile çalışacaktır.


0
2017-08-24 17:39



ekran -dmS daha iyi olurdu. - 3molo
Belki ama ayrılan şeyleri anlamakta daha kolay olduğunu düşünüyorum: açık ekran, komutları verin ve aynı satırdaki her şeyden ayırın, oturuma bir isim vermek zorunda. - laurent
Ekran etkileşimli kullanım için harika, ancak komut dosyası veya otomasyon için uygun değil. - Jonathan Hartley