Tetap menjalankan Sesi SSH setelah pemutusan

208

Saya kadang-kadang memiliki proses yang berjalan lama yang ingin saya mulai sebelum pulang, jadi saya membuat sesi SSH ke server untuk memulai proses, tetapi kemudian saya ingin menutup laptop saya dan pulang dan kemudian, setelah makan malam, saya ingin periksa proses yang saya mulai sebelum meninggalkan pekerjaan. Bagaimana saya bisa melakukan itu dengan SSH? Pemahaman saya adalah bahwa jika Anda memutuskan koneksi SSH Anda, Anda juga akan memutus sesi login Anda di server, sehingga mematikan proses yang berjalan lama.

λ Jonas Gorauskas
sumber

Jawaban:

205

Gunakan nohupuntuk membuat proses Anda mengabaikan sinyal hangup:

$ nohup long-running-process &
$ exit
Warren Young
sumber
20
Ini dia. Tidak perlu menginstal layar atau tmux. Ini sebenarnya cara lama yang baik untuk melakukannya. Tentu 'layar' atau 'tmux' keduanya adalah aplikasi yang luar biasa dan harus digunakan saat dibutuhkan, tetapi sesederhana menjalankan proses di latar belakang dari mana Anda dapat logout, pilih yang di atas.
reiche
2
Apakah nohup seperti ditolak?
cjac
28
Mereka memiliki tujuan yang serupa, tetapi mereka berbeda dalam banyak hal. nohupmencegat SIGHUP sehingga ketika shell yang berlari itu berhenti dan mengirimkan SIGHUP ke semua anak yang masih berjalan, long-running-processtidak mati. disowncukup menghapus pekerjaan yang ditentukan dari daftar anak Bash, sehingga tidak akan mencoba mengirim SIGHUP sama sekali. nohupadalah program yang terpisah dari shell, jadi ia bekerja dengan semua shell, sedangkan disownBash adalah builtin. nohupmenerima perintah untuk dijalankan, sedangkan disownhanya bekerja setelah pekerjaan dimulai dan Anda telah melatar belakanginya sehingga Anda dapat kembali ke shell.
Warren Young
3
Ulasan cepat yang mengagumkan untuk mereka yang tidak terbiasa dengan nohup dan disown - serta beberapa cara mudah untuk berurusan dengan sesi terminal serverwatch.com/tutorials/article.php/3935306/…
Dan
7
tail -f nohup.outuntuk memeriksa apa yang terjadi ketika Anda kembali.
Ricardo Stuven
141

Anda ingin menggunakan Layar GNU. Ini sangat luar biasa!

ssh [email protected]
screen               #start a screen session
run-a-long-process

CTRL+ a, duntuk keluar dari sesi layar Anda

exit                 #disconnect from the server, while run-a-long-process continues

Ketika Anda kembali ke laptop Anda:

ssh [email protected]
screen -r            #resume the screen session

Kemudian periksa kemajuan proses jangka panjang Anda!

screenadalah alat yang sangat komprehensif, dan dapat melakukan lebih banyak dari yang saya jelaskan. Saat berada di sesi layar, coba ctrl + a ,? untuk mempelajari beberapa perintah umum. Mungkin yang paling umum adalah:

  • CTRL+ a, cuntuk membuat jendela baru
  • CTRL+ a, nuntuk beralih ke jendela berikutnya di sesi layar Anda
  • CTRL+ a, puntuk beralih ke jendela sebelumnya di sesi layar Anda
  • jika Anda masuk dari banyak sistem yang berbeda, Anda mungkin secara tidak sengaja membiarkan diri Anda terikat pada sesi layar aktif di komputer lain. untuk alasan itu, saya selalu melanjutkan dengan screen -d -runtuk memastikan bahwa jika shell lain terpasang pada sesi layar saya, itu akan terlepas sebelum saya melanjutkannya di sistem saya saat ini.
Sandy
sumber
8
tmux adalah analog layar modern.
zvolkov
Saya tidak tahu tentang modern, tetapi awalan kunci default tmux (Ctrl + b) membantu jika Anda terbiasa dengan bash / emacs kunci.
sajith
2
Layarnya cukup keren jika Anda ingin terminal bersama karena alasan tertentu. Buat layar screen -S namedan biarkan teman Anda yang lain terhubung dengannya screen -x name.
Patrick
1
tmuxdengan tmuxinatormerupakan kombinasi yang bagus untuk pengaturan mewah, sementara saya lebih suka screensebagai solusi cepat dan sederhana.
earthmeLon
Jawaban ini adalah yang terbaik .. Saya menyukainya. Penelitian luar biasa
Jaffer Wilson
42

Jika Anda belum merencanakan dan menyiapkan screen, dll. Lakukan saja hal berikut:

  1. Jika proses Anda berjalan di latar belakang: goto # 3, selain itu: Ctrl-Zuntuk menangguhkan proses latar depan. Ini akan melaporkan pekerjaan # dari proses yang ditangguhkan, misalnya:

    [1]+  Stopped                 processName
    
  2. Kirim processNameke latar belakang dengan bg %1(menggunakan apa pun pekerjaan # yang mengikuti %). Ini akan dilanjutkan processNamedi latar belakang.

  3. Ditolak processName dengan disown %1atau disown PID. Gunakan -hbendera jika Anda ingin mempertahankan kepemilikan sampai Anda mengakhiri shell Anda saat ini.

Mike Covington
sumber
5
Terima kasih untuk ini! Saya memiliki pekerjaan yang sedang berjalan dan saya pikir saya tidak akan dapat mempertahankannya karena saya belum menggunakannya &ketika saya memulainya. Ini sepertinya berhasil!
Matt
4
Ini luar biasa! Saya tidak pernah tahu Linux bisa membiarkan Anda mentransfer kendali proses aktif seperti ini. Saya takut baterai saya akan mati ketika SSH'ing masuk ke server saya di tengah proses yang berjalan lama, dan ini adalah jawaban untuk saya!
Pluto
14

Apa yang ingin Anda gunakan adalah layar atau lebih baik pembungkus ramah pengguna di sekitar layar yang disebut byobu.

Layar memungkinkan Anda untuk menjalankan beberapa sesi terminal virtual dalam sesi ssh yang sama. Halaman tutorial dan bantuan tersedia.

byobu adalah pembungkus yang memungkinkan untuk dengan mudah membuka layar baru dengan tombol fungsi sederhana alih-alih kombinasi tombol dari ctrl-a. Ini juga menunjukkan garis status dengan semua terminal virtual terbuka yang dapat dinamai.

Fitur bagus lainnya adalah kenyataan bahwa semua layar Anda dapat tetap aktif saat koneksi ssh Anda terputus. Anda hanya terhubung lagi melalui ssh dan memanggil byobu dan semuanya seperti sebelumnya.

Akhirnya beberapa tangkapan layar byobu.

txwikinger
sumber
Saya meluncurkan proses pada server saya di dalam Terminal Byobu tanpa benar-benar tahu apa itu (saya hanya mencari Terminal dan mengklik Byobu karena saya belum pernah melihatnya sebelumnya). Saya terus menggunakan Byobu karena memiliki bilah status berwarna-warni di bagian bawah dan saya pikir itu keren. Hari ini saya menemukan diri saya ingin mengakses sesi terminal itu dari jarak jauh melalui SSH. Yang harus saya lakukan adalah mengetik "byobu" dan itu menunjukkan sesi terminal segera. Senang banget aku ketemu byobu!
nick
8

Mungkin perlu dicatat

ssh -t lala screen -rxU mooakan melampirkan ke sesi moo di host lala

ssh -t lala screen -S mooakan membuat sesi moo di host lala

dan

ssh -t lala screen -S moo quuxakan membuat sesi moo di host lala dan menjalankan program quux , berhenti dari sesi saat selesai.

cjac
sumber
3

Pertanyaan lama, aneh masih belum ada yang menyarankan tmux , yang bertindak sebagai pembungkus untuk n konsol dan tetap terbuka sampai dibutuhkan. Ini memungkinkan lebih banyak kontrol, di samping sejumlah fungsi yang dimiliki tmux. Sangat mudah untuk mengelolanya, Anda cukup menjalankan tmux, yang membawa Anda dalam cangkangnya, memulai pekerjaan looong Anda, lalu tekan ctrl + b diikuti oleh d (lepaskan) ( ctrl+badalah "ok google" dari tmux, dan dmerupakan perintah untuk menutup tanpa keluar dari shell). Ini benar-benar berfungsi jika Anda hanya menutup, misalnya, dempul. Setelah makan malam, ketika Anda terhubung lagi, Anda dapat membuka kembali tmux dengan tmux attachuntuk melihat layar Anda persis seperti yang Anda tinggalkan. Sesuatu yang saya sukai adalah panel pemisah: ctrl+bdan kemudian tekan ". Untuk mengubah dari satu panel ke yang lain, ctrl+blalu tekan panah atas / bawah.

masuk akal
sumber
3

Anda dapat menemukan panduan yang baik di sini: Jaga Sesi SSH Anda Berjalan saat Anda Putus

sudo apt-get install screen

Sekarang Anda dapat memulai sesi layar baru dengan hanya mengetik layar di baris perintah. Anda akan ditampilkan beberapa informasi tentang layar. Tekan enter, dan Anda akan berada pada prompt normal.

Untuk memutuskan sambungan (tapi biarkan sesi berjalan) Tekan Ctrl+ Adan kemudian Ctrl+ Dsecara berurutan. Anda akan melihat pesan [terlepas]

Untuk menyambung kembali ke sesi yang sudah berjalan

screen -r

Untuk menyambung kembali ke sesi yang ada, atau membuat yang baru jika tidak ada

screen -D -r

Untuk membuat jendela baru di dalam sesi layar yang sedang berjalan Tekan Ctrl+ Adan kemudian Csecara berurutan. Anda akan melihat prompt baru.

Untuk beralih dari satu jendela layar ke Hit Ctrl+ lainnya Adan kemudian Ctrl+ Asecara berurutan.

Untuk daftar jendela layar terbuka Tekan Ctrl+ Adan kemudian Wsecara berurutan

Victor Hugo Arango A.
sumber
Anda dapat menggunakan <kbd>Ctrl</kbd>untuk menampilkan nama sebagai tombol keyboard.
Tomasz
1

Saya menggunakan NX NoMachine, yang gratis untuk saya karena hanya saya. Pada dasarnya, ini menjalankan sesi X di server yang dapat Anda sambungkan dan putuskan dari berulang-ulang. Sesi X terus berjalan ketika Anda tidak terhubung. Koneksi dapat dilakukan dari mana saja. Anda dapat memilih antara jendela mengambang atau satu jendela yang berisi seluruh desktop (mis. Desktop Gnome lengkap). Klien (yang Anda jalankan di laptop) dapat dijalankan di Linux, MacOS, Solaris atau Microsoft Windows. Dalam kasus terakhir jika Anda memilih jendela mengambang, jendela itu muncul secara terpisah di Windows Taskbar.

Saya menggunakan laptop Windows XP saya (yang saya perlukan untuk perangkat keras khusus Windows tertentu yang saya miliki) sebagai ujung depan untuk dua server Linux saya menggunakan NX Nomachine. Saya bahkan dapat mencetak ke printer yang terpasang pada laptop Windows saya dari Linux.

Rob_before_edits
sumber