Ssh üzerinde uzun süren bir komut yapmak


10

Ben ediyorum sshbir sunucuya ing ve ben yaklaşık alacağım bir Python komut dosyası başlıyorum. Tamamlamak için 24 saat. İnternet bağlantım ortadan kalkarsa ne olur? Bu komutu durduracak mı?

Uzun süren komutumu yerel bağlantı kesimlerinin etkilemeyeceği şekilde çalıştırmanın bir yolu var sshmı ve tekrar oturum açtıktan sonra çıktısını görmeye devam edebilir miyim ?

Yanıtlar:


29

En iyi yol, screenkomutu çalıştırmak için bir oturum başlatmak için (sunucuda) kullanmak ve daha sonra ekranın bağlantısını kesmek, böylece çalışmaya devam etmek ve başka şeyler yapmak ya da sadece sunucunun bağlantısını kesmek. Diğer seçenek kullanmaktır nohupbirlikte &sahip diyenohup <command> &


Ekran. Veya bir kez daha çalıştırdığınız bir şeyse bir cron görevi ayarlayabilirsiniz.
xeon

2
Ekranda çalışırken bağlantısı kesilirse, sizi screen -ryeniden bağlar.
dpflug

2

disownİşlemi önceden screenveya olmadan başlattıysanız da kullanabilirsiniznohup


2

Mevcut cevaplar iyi çalışabilir, ancak BusyBox (ev yönlendiricileri gibi minimal donanım için bir kabuk ve araçlar kümesi) için bir şeye ihtiyacım vardı. Benim sistem yoktur screen, dtach, at, disown, hatta nohup! Yani tbc0 SO ( bağlantı ) sayesinde, bu gem bulundu. Hemen geri döner, ancak sunucu işlemi çalışmaya devam eder:

ssh myserver 'sleep 100 >&- 2>&- <&- &'

Veya, birden fazla komut gerekirse:

ssh myserver '(echo one; sleep 100; echo two; sleep 200) >&- 2>&- <&- &'

Açıklama:

  • >&- - stdout kolunu kapat
  • 2>&- - yakın stderr
  • <&- - yakın stdin
  • & - süreci arka plana koy

Bu, harici programlar kullanmaz ve ksh, ash, Bourne kabuğu, bash vb.


1

Bir işlemin arka planını yapar ve oturumunuzu kapatırsanız, işlem init (PID 1) tarafından benimsenecektir.

Bir oturumum varsa ve şunu yaparsam:

]$ sleep 10000 &
]$ exit

ve başka bir oturum açın ve çalıştırın:

]$ ps -ef | grep sleep
501      26387     1  0 16:37 ?        00:00:00 sleep 10000
root     26422 21360  0 16:40 pts/0    00:00:00 grep sleep

İşlemim hala çalışıyor ve üst sürecinin artık 1 (init) olduğunu görüyoruz.

Alternatif olarak senaryonuzu bir daemon gibi kurabilirsiniz. Hızlı bir arama, bu görünüşte yararlı olan bağlantıyı açar : http://onlamp.com/python/pythoncook2/solution.csp?day=1 . Eğer bu yaklaşımı benimsemek istiyorsan.

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.