Saya ingin menjalankan skrip, start.sh
pada server jauh yang menjalankan ini:
nohup node server.js &
Secara naif, saya menyebut SSH seperti ini:
ssh myserver <<EOF
./start.sh &
EOF
Ini memulai skrip, tetapi membuat sesi tetap terhubung. Saya ingin mengikuti langkah ini dengan perintah lain dalam sebuah skrip, jadi itu tidak baik.
Bagaimana saya bisa SSH ke mesin jarak jauh, meluncurkan nohup
perintah ke latar belakang, lalu lepaskan? Saya kira saya bisa menempatkan proses SSH itu sendiri ke latar belakang, tapi itu sepertinya tidak benar.
sumber
> /dev/null
.> /dev/null 2>&1
adalah membuang output stdout / stderr dengan mengarahkan kembali ke lubang hitam lolnohup command2 >> /path/to/command2.log 2>&1 &
di terminal dan kemudian menutup terminal maka prosesnya hilang?Mengapa tidak hanya tmux atau layar dan selesai dengan itu? Sebagai contoh:
Ini praktis jika itu adalah sesuatu yang akan terus berulang atau memakan waktu cukup lama untuk diselesaikan. Anda dapat memutuskan koneksi dari sesi dan itu akan tetap aktif.
sumber
tidak berjalan dalam mode daemon, menjaga sesi ssh Anda terhubung. Ssh sesi akan kembali dalam 10 detik, meskipun Anda menggunakan nohup.
Alasannya adalah stdout dan stderr jarak jauh masih terhubung ke sesi Anda. Itu membuat sesi ssh tetap hidup, nohup tidak membantu.
Ini:
segera kembali. Itu memulai proses jarak jauh dengan nohup dan segera keluar dari sesi ssh.
sumber
Bentuk lebih pendek:
Tampaknya, bash itu sendiri melakukan pelepasan dari terminal, jadi tidak perlu nohup. Saya menjalankan Ubuntu 14.04 x86_64, bash 4.3.11.
sumber
nohup;
hanya menghasilkan keluhan tentang argumen yang hilang.command 1; command 2; ...
mewakili skrip OP ingin dijalankan. OP juga dapat menggunakan kasus khusus dari jawaban ini:ssh myserver ./start.sh &>/dev/null &