Bagaimana menjalankan skrip melalui SSH yang tidak berakhir saat saya menutup koneksi?

18

Saya perlu menjalankan skrip, yang membutuhkan waktu lama untuk dieksekusi, atau saya hanya ingin menjalankannya selamanya. Saya tidak bisa hanya SSH ke mesin saya, karena ketika saya lepaskan berhenti berjalan.

Apakah ada cara untuk menjalankan skrip yang tidak bergantung pada shell yang memulainya?

Saya menggunakan Ubuntu 9.04.

Jakub Arnold
sumber

Jawaban:

24

Anda dapat menjalankan perintah dengan perintah nohup sebelumnya. Anda juga dapat menjalankannya di 'layar', yang memungkinkan Anda memasang kembali terminal.

Sebagai contoh:

ssh mySever 'nohup bash myscript.sh'

Atau ssh saja dan jalankan perintah nohup. Itu harus tetap berjalan bahkan ketika Anda memutuskan sambungan. Ini karena nohup akan mencegat singel SIGHUP (hangup).

Layar sedikit lebih terlibat, tetapi selama 20 menit mungkin Anda perlu mempelajari dasar-dasarnya, itu adalah salah satu alat yang paling berguna di luar sana. Ini tutorialnya .

Kyle Brandt
sumber
Diambil oleh Kyle ...> tersenyum <
Evan Anderson
+1 kepada siapa saja yang menembak Evan. Selamat 10K :)
squillman
1
tautan ke tutorialnya rusak :(
Ido Ran
7

Saya selalu menggunakan nohup. Jika saya peduli dengan hasilnya, saya mengarahkan ulang ke file log, kalau tidak saya kirim ke / dev / null.

Contoh:

nohup scp file.tar.gz root@someserver:/var/tmp > /dev/null 2>&1 &

Itu menempatkannya di latar belakang, dengan output ke / dev / null, dan itu kebal terhadap sinyal HUP jika Anda logout. Anda juga dapat "menolak" pekerjaan dengan cangkang tertentu (seperti bash) sehingga tidak terhubung ke sesi Anda.

disown %1
m0j0
sumber
1
+1 untuk disown - sangat berguna ketika Anda lupa untuk menjalankan menggunakan nohup
Mark
5

Untuk memasang layar: apt-get install screen

Kemudian luncurkan menggunakan hanya: screen

Dan man screenuntuk mendapatkan kunci yang mengikat.

Disko
sumber
+1! Layar adalah hal da!
Javier
Saya dulu menggunakan layar, tetapi beralih ke tmux karena berbagai alasan. Google "tmux vs screen" dan Anda akan menemukan beberapa tautan seperti ini: superuser.com/questions/236158/tmux-vs-screen
m0j0
2

Saat Anda masuk ke server, Anda dapat menjalankan skrip dalam mode terpisah dengan perintah berikut:

nohup script >script.out 2>script.err &

Kemudian ketika Anda masuk lagi, Anda dapat memeriksa script.out untuk output apa pun, dan script.err untuk setiap pesan kesalahan. Jika Anda ingin pesan output dan kesalahan dalam file yang sama, maka lakukan:

nohup script >script.out 2>&1 &
Michael Dillon
sumber