SSH üzerinden bir nohup komutu çalıştırın, ardından bağlantıyı kesin


46

start.shBu çalışan bir uzak sunucuda bir komut dosyası çalıştırmak istiyorum :

nohup node server.js &

Naif olarak SSH'yi şöyle söylerim:

ssh myserver <<EOF
./start.sh &
EOF

Bu komut dosyasını başlatır, ancak oturumu bağlı bırakır. Bu adımı bir komut dosyasındaki diğer komutlarla birlikte izlemek istiyorum, yani bu iyi değil.

Uzaktaki makineye nasıl SSH yapabilirim nohup, arka plana bir komut verebilirim , sonra bağlantıyı kesebilirim? Sanırım SSH sürecinin kendisini arka plana koyabilirdim ama bu doğru gözükmüyor.

Yanıtlar:


40

Burada zaten doğru yolu buldunuz, belge.

NOT : ssh (client) komutunu arka planın içine & sonuna yerleştirerek koyabilirsiniz, ancak çıktısını görmezsiniz. Bunu gerçekten yapmak istiyorsanız, uzaktaki ana makineden gelen cevabı kontrol etmeniz gerekebilir diye stdout / stderr dosyasını bir dosyaya yönlendirin.

Temel olarak, her iki şekilde de yapabilirsiniz:

{, S} komutunu doğrudan çalıştırın

ssh user@host "nohup command1 > /dev/null 2>&1 &; nohup command2; command3"

VEYA

ssh user@host "$(nohup command1 > /dev/null 2>&1 &) && nohup command2 >> /path/to/log 2>&1 &"

NOT : &&ikincisini çalıştırmadan önce ilk komutun 0 döndürmesini gerektirir.

Burada belgeyi kullanın

ssh user@host << EOF
nohup command1 > /dev/null 2>&1 &
nohup command2 >> /path/to/command2.log 2>&1 &
......
EOF

Yukarıdaki 3 seçenek sizin için çalışması gerekir.

Ayrıca, buradaki cevaba bir göz atın: https://askubuntu.com/a/348921/70270


Teşekkürler - bu yüzden eksik olduğum parça gerçekti > /dev/null.
Steve Bennett

Gerçekten de, > /dev/null 2>&1herhangi bir stdout / stderr çıktısını kara deliğe lol yönlendirerek atmaktır
Terry Wang

5
Günlük dosyalarına yazmak için sadece> yerine >> kullanmanızı öneririm. Aksi takdirde, hataları yalnızca son çalıştırmadan alırsınız.
Alexis Wilke

Eğer nohup command2 >> /path/to/command2.log 2>&1 &bir terminalde olduğu gibi basit bir komut başlatıp işlemin kaybolduğu terminali kapatmam doğru olur mu?
Luke,

1
@TerryWang ikinci örnek ve işareti ve ardından çift ve işareti ile çalışmaz, bkz. Unix.stackexchange.com/q/67006/86716
tsionyx

7

Neden sadece tmux veya ekran ve bununla yapılmıyor? Örneğin:

$ tmux new -s SessionNameHere
$ nohup /path/to/your/script.sh

Bu, sürekli döngü yapacak veya bitirmesi zaman alacak bir şeyse pratiktir. Oturumun bağlantısını kesebilirsiniz ve aktif kalır.


2
İstediğim şeye tam olarak uymuyor, dizüstü bilgisayarımda çalıştırılabilen, bağlanacak, komut verecek, sonra da bağlantıyı kesecek tek bir komuttur.
Steve Bennett

3
ssh node "nohup sleep 10 &"

Daemon modunda çalışmıyor, ssh oturumunuzu bağlı tutar. Ssh oturumu nohup kullanmanıza rağmen 10 saniye içinde geri dönecek.

Nedeni, uzaktan stdout ve stderr'in hala oturumunuza bağlı olmasıdır. Ssh oturumunu canlı tutar, nohup yardımcı olmaz.

Bu:

ssh node "nohup sleep 10 1>/dev/null 2>/dev/null &"

hemen döner. Nohup ile uzaktan işlemi başlatır ve hemen ssh oturumundan çıkar.


Bu tam olarak bizim sorunumuzdu. Biz sadece 1> file.log vardı. Bir makinedeki ssh sıkışmış. 'Düğüm' makinesindeki işlem çalışıyordu. Kapanmadan hemen önce bir 2> & 1 eklediğimizde &, ssh'nin bağlantısını keser.
Lee Meador

2

Daha kısa form:

ssh host "(command 1; command 2; ...) &>/dev/null &"

Görünüşe göre bash'ın terminalden ayrılma işlemi yaptığı için nohup gerekmiyor. Ubuntu 14.04 x86_64, bash 4.3.11'i çalıştırıyorum.


1
Bu soruya bir cevap vermiyor. Bir yazarın açıklamasını eleştirmek veya talep etmek için, yazdıklarının altında bir yorum bırakın; istediğiniz zaman kendi yazılarınıza yorum yapabilirsiniz ve yeterli saygınlık elde ettiğinizde , herhangi bir yayına yorum yazabilirsiniz . - Şu kaynaktan
David Foerster

Bu işe yaramadı. nohup; Sadece eksik argümanlar hakkında bir şikayet çıktı.
Steve Bennett,

@DavidFoerster, Fikir yok neden, command 1; command 2; ...OP komut dosyasını temsil etmek istiyorsa çalıştırmak istiyorum. OP bu cevabın özel örneğini de kullanabilir:ssh myserver ./start.sh &>/dev/null &
Alek_A
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.