Pertanyaan Bagaimana agar proses tetap berjalan setelah mengakhiri sesi ssh?


Katakanlah saya meluncurkan banyak proses dari sesi ssh. Apakah mungkin untuk mengakhiri sesi ssh sambil menjaga proses yang berjalan pada mesin jarak jauh?


506
2017-10-21 12:09


asal


Terkait: unix.stackexchange.com/questions/4004/… - Anton Tarasenko


Jawaban:


Anda harus mencari alternatif modern seperti tmux.

tmux lebih unggul screen karena berbagai alasan, berikut beberapa contohnya:

  • Windows dapat dipindahkan di antara sesi dan bahkan tertaut ke beberapa sesi
  • Windows dapat dibagi secara horizontal dan vertikal ke dalam panel
  • Dukungan untuk terminal warna UTF-8 dan 256
  • Sesi dapat dikontrol dari shell tanpa perlu memasuki sesi

Fungsionalitas Dasar

Untuk mendapatkan fungsi yang sama seperti yang dijelaskan di menjawab merekomendasikan screen, Anda perlu melakukan hal-hal berikut:

  • ssh ke mesin remote
  • mulai tmux dengan mengetik tmux ke dalam shell
  • mulai proses yang Anda inginkan di dalam dimulai tmux sidang
  • tinggalkan / lepaskan tmux sesi dengan mengetik Ctrl+b lalu d 

Anda sekarang dapat keluar dengan aman dari mesin remote, proses Anda akan terus berjalan di dalam tmux. Ketika Anda kembali lagi dan ingin memeriksa status proses Anda, Anda dapat menggunakan tmux attach untuk melampirkan ke Anda tmux sidang.

Jika Anda ingin memiliki beberapa sesi berjalan berdampingan, Anda harus menamai setiap sesi menggunakan Ctrl+b dan $. Anda bisa mendapatkan daftar sesi yang sedang berjalan menggunakan tmux list-sessions, sekarang lampirkan sesi berlari dengan perintah tmux attach-session -t 0.

tmux dapat melakukan banyak hal yang lebih maju daripada menangani satu jendela dalam satu sesi. Untuk informasi lebih lanjut silahkan lihat man tmux atau halaman GitHub tmux. Khususnya, inilah sebuah FAQ tentang perbedaan utama antara screen dan tmux.


594
2017-11-23 09:26



Penggunaan @CraigM screen -x -r [screenname] atau screen -rx singkatnya jika Anda hanya memiliki satu sesi layar aktif. Ini memungkinkan Anda melampirkan contoh layar yang ada. - Lekensteyn
Saran ini membantu saya dengan masalah yang sama tetapi saya pikir itu termasuk salah ketik. Saya cukup yakin bahwa Anda perlu mengetik Ctrl-b lalu d untuk meninggalkan / melepaskan tmux sidang. Tentu saja itu adalah kasus untuk versi tmux pada Ubuntu 12.04 saya. - cxrodgers
Saya membuat kesalahan saat mengikuti petunjuk di atas. Saya akan membaginya jika ada yang jatuh ke dalam kesalahan yang sama: Saya memulai tmux di shell komputer saya sendiri daripada shell komputer jarak jauh. Satu kebutuhan untuk memulai tmux di shell komputer jarak jauh. - Mert Nuhoglu
Layar sekarang sedang dikembangkan lagi: lists.gnu.org/archive/html/screen-devel/2014-04/msg00024.html Bisakah Anda memperbarui jawaban Anda? - muru
Atau, jalankan tmux detach bukannya mengetik ctrl-b d - Andrew MacFie


Cara terbaik sering kali paling sederhana.

nohup long-running-command &

Itu dibuat khusus untuk ini, bahkan log stdout ke nohup.log

man nohup

Jika Anda ingin "background" beberapa tugas yang sudah berjalan, maka taruhan terbaik Anda adalah ctrl + z lalu jalankan

bg (ini akan melatarbelakangi tugas terakhir Anda yang ditangguhkan, memungkinkannya untuk terus berjalan)

lalu cepat disown harus menjaga proses tetap berjalan setelah Anda logout.

screen dan yang lain bisa melakukannya, tapi itu bukan untuk mereka. saya merekomendasi nohup untuk tugas-tugas yang Anda tahu akan Anda tinggalkan dan bg untuk tugas yang sudah Anda jalankan dan tidak ingin memulai kembali.

Perlu diingat, keduanya spesifik bash. Jika Anda tidak menggunakan bash, maka perintahnya bisa berbeda.


217
2017-11-28 02:58



Saya akan merekomendasikan untuk melakukannya disown -h - Michele
menarik layar dan tmux tidak bekerja untuk penambang, bur nohup bekerja - Yasin Okumuş
bg + disowntidak bekerja untukku. Saya memiliki skrip penyebaran menjalankan saya lupa untuk memulai di dalam tmux, dan harus pergi lebih awal untuk rapat. Skrip terus menerus menghasilkan kemajuan ke shell. ctrl+z menghentikan proses, mengembalikan saya ke bash. bg melanjutkan proses, tetapi itu juga melanjutkan keluaran status ke bash, sehingga mustahil untuk melihat apa yang saya ketik. Namun, a disown perintah yang dihasilkan "memungkiri: saat ini: tidak ada pekerjaan seperti itu" - BrianHVB


Anda bisa melakukannya dengan menggunakan screen.

Mengetik man screen untuk mengetahui lebih lanjut atau membaca ini halaman manual layar.

Skenario sederhana:

  • ssh ke dalam kotak remote Anda. Mengetik screen Kemudian mulailah proses yang Anda inginkan.

  • tekan Ctrl-SEBUAH kemudian Ctrl-D. Ini akan "melepaskan" sesi layar Anda tetapi biarkan proses Anda berjalan. Anda sekarang dapat keluar dari kotak remote.

  • Jika Anda ingin kembali lagi nanti, masuk lagi dan ketik screen -r Ini akan "melanjutkan" sesi layar Anda, dan Anda dapat melihat output dari proses Anda.


179
2017-10-21 12:20



Saya biasanya akan menamai sesi layar saya menggunakan screen -S name untuk membuatnya lebih mudah terhubung dengan yang benar nantinya. - David Oneill
Tautan terputus - Gab是好人
Secara pribadi, saya sedang mengerjakan sebuah kotak tanpa perangkat lunak kontrol paket. Setelah menghabiskan sekitar setengah jam membangun ketergantungan untuk TMUX (yang saya pribadi memiliki pengalaman dengan dan suka) dari sumber, menjadi jelas bahwa layar adalah solusi yang lebih baik dan lebih sederhana bagi saya. TL; DR: solusi optimal untuk masalah ini tergantung pada use case, mesin, dan berapa banyak waktu yang harus Anda siapkan. Terima kasih atas jawaban ini :) - Max von Hippel
Kombinasi dengan screen -S sebelum berangkat dan screen -r ketika kembali luar biasa! - Meloman
Terima kasih untuk ini. Solusi ini bekerja untuk saya sementara tmux tidak (saya menggunakan versi bash untuk windows saat ssh'ing ke mesin linux) - Michael Sorensen


Layar dan nohup adalah cara yang lebih baik, tetapi jika Anda harus melepaskan proses yang sudah berjalan tanpa layar atau nohup Anda dapat menjalankan perintah disown.

disown [-ar] [-h] [jobspec… |pid… ]

Tanpa opsi, hapus masing-masing jobspec dari tabel pekerjaan aktif. Jika itu -h opsi diberikan, pekerjaan tidak dihapus dari tabel, tetapi ditandai agar SIGHUP tidak dikirim ke pekerjaan jika shell menerima SIGHUP. Jika jobspec tidak ada, dan tidak ada -a tidak juga -r opsi diberikan, pekerjaan saat ini digunakan. Jika tidak jobspec disediakan, yang -a opsi berarti menghapus atau menandai semua pekerjaan; itu -r opsi tanpa jobspec argumen membatasi operasi untuk menjalankan pekerjaan.

Dengan memungkiri Anda dapat menutup terminal dan mendapatkan proses yang berjalan di mesin.


72
2017-10-21 13:19



Ini juga cara favorit saya untuk melakukannya. Saya sering menggunakannya disown -a && exit - Stefano Palazzo♦
Sempurna. Ini adalah perintah yang indah dan layak untuk semua upvote! - Greg
satu kata peringatan, saya menghentikan proses yang berjalan dengan Ctrl-Z dan tidak memulainya di latar belakang sebelum menelepon disown dan itu membunuhnya. - HDave
Dapat crash jika ingin menulis ke terminal. Mengarahkan output dari proses yang sedang berjalan tidaklah mudah. Lebih baik memulainya dengan benar dengan nohup. - jiggunjer
Ini adalah jawaban yang bagus, karena langsung menjawab pertanyaan. Penulis pertanyaan bertanya apa yang harus dilakukan setelah telah mengeksekusi banyak perintah yang berjalan lama. Sebagian besar jawaban ini memberi tahu Anda apa yang harus dilakukan sebelum Anda menjalankan perintah. - q0rban


Saya terjebak dalam mv besar jadi saya tidak dalam posisi untuk menghentikan proses, mengatur layar dan kemudian memulainya lagi. Saya berhasil keluar dari sesi ssh dengan proses yang berjalan dengan pada dasarnya melakukan langkah-langkah berikut:

  1. ssh [server]
  2. perintah
  3. CTRL + Z
  4. bg
  5. menyangkal
  6. keluar

Langkah 3 menghentikan proses saat ini (misalnya perintah 'mv' saya). Langkah 4 menempatkan proses yang dijeda ke latar belakang dan melanjutkannya. Langkah 5 memungkinkan Anda membatalkan proses.


37
2017-11-25 03:30



Built-in selalu menjadi pilihan pertama saya :) THX - ken_oy
Jawaban ini harus ditandai sebagai benar. Untuk menginstal dan membiasakan diri untuk memecahkan masalah ini dibesar-besarkan. - Ulrich-Lorenz Schlüter
Ini sangat membantu ketika Anda sudah mulai menjalankan perintah apa pun dan yang sedang berjalan lama. Menghentikan dan memulainya dalam Sesi TMUX akan membutuhkan waktu - Deepali Mittal


Ada dua program utama yang dapat Anda gunakan untuk memelihara program dan status terminal melalui beberapa koneksi ssh. Mereka layar (incumbent, tapi sayangnya tidak terawat. Rupanya sedang aktif dikembangkan sekarang) dan tmux (lebih baru, aktif dipertahankan). Byobu adalah ujung depan yang dapat berjalan di atas mereka dari sistem ini dan menawarkan informasi status ubuntu tambahan. Pada instalasi baru itu akan menggunakan tmux sebagai backend, jika Anda memiliki instalasi byobu yang lebih lama dan konfigurasi yang sudah ada akan mempertahankan backend sebelumnya, baik itu layar atau tmux.

Byobu

Byobu dapat diinstal pada komputer dengan melakukannya di mesin berbasis Debian:

sudo aptitude install byobu

Menggunakan yum, ya

su -c 'yum install byobu'

Anda juga dapat menginstal byobu pada distribusi lain.

Menggunakan byobu

Anda dapat memulai byobu dengan berlari byobu pada mesin host setelah terhubung menggunakan ssh. Ini akan memberi Anda shell yang terlihat seperti ini:

image-byobu

Anda juga dapat menggunakan Terminal Byobu pada mesin Ubuntu dengan opsi -X dan dengan mudah memiliki byobu yang berfungsi sempurna.

Pemakaian:

Mulai byobu dengan mengetik byobu.

Anda dapat menekan F2 untuk membuat jendela baru dalam sesi saat ini, F3-F4 untuk beralih di antara berbagai jendela.

Bagian terbaik tentang byobu adalah, Anda tidak perlu benar-benar mematikan proses yang berjalan di terminal untuk meninggalkan terminal. Anda cukup mengirimkan layar / tmux (kerangka byobu) ke latar belakang dan melanjutkan waktu berikutnya Anda datang:

  • Untuk meninggalkan byobu dan keeep it running (lepaskan) tekan F6.
  • Lain kali Anda datang, lakukan saja byobu dan Anda sholud akan kembali tepat di mana Anda berada.

    byobu-detach-attach

Anda juga dapat membuat berbagai sesi byobu byobu -S session1 dan seterusnya. Dan Anda dapat terhubung ke salah satu dari mereka ketika Anda kembali.

Anda dapat melakukan lebih banyak menggunakan Byobu. Gunakan! Beberapa panduan definitif sini, sini atau sini.


19
2017-11-24 22:09



Saya mencoba menggunakan byobu dari sesi berbasis PuTTY ke kotak Ubuntu saya, tetapi saya mendapatkan garis status diulang dan bergulir di layar. Meskipun terlepas dengan benar saat menekan F6, itu bukan solusi yang bisa digunakan dalam pengaturan saya. - jfmessier
@ jfmessier Itu karena PuTTY tidak mengambil ncurses (utf-8 pada dasarnya) dengan baik. Mungkin untuk menghilangkan masalah ini dengan mengikuti utas ini - stackoverflow.com/questions/10731099/… - SiddharthaRT
Ini luar biasa! 1. itu memberi saya prompt bash berwarna yang saya tidak bisa mengaktifkan dengan bash sebagai shell default saya dan 2. Saya bisa menjalankan 2 bot pada saat yang sama dan masih punya terminal lain untuk dikerjakan! @SiddharthaRT Anda layak menerima jawaban suara! - Dev


Anda tidak dapat melakukan ini setelah proses dimulai, Anda harus mengatur semuanya sebelum Anda menjalankan pekerjaan yang lama berjalan.

Kamu dapat memakai nohup tetapi kebijaksanaan modern menyarankan Anda menggunakan layar atau byobu sebagai info masuk Anda sehingga Anda dapat melepaskan dan membiarkan segala sesuatunya berjalan.

Layar memiliki keuntungan yang dapat Anda lepas dari satu mesin dan pasang kembali dari satu mesin dan pasang kembali dari yang lain yang berguna jika Anda ingin memeriksa proses berjalan lama yang berjalan di luar akhir hari kerja.

Ada awal yang masuk akal panduan ke layar sini.

byobu menempatkan antarmuka yang mudah digunakan di atas layar dengan menu dll. Ini juga merupakan implementasi layar saat ini di ubuntu yang lebih baru. F2 untuk memulai terminal baru F3 / F4 untuk beralih bolak-balik dan F6 untuk memutus sambungan. Ketik exit untuk benar-benar mengakhiri terminal secara permanen.


16
2017-10-21 12:16



byobu menggunakan tmux hari ini .. - scottl
"Anda tidak dapat melakukan ini setelah prosesnya dimulai, Anda perlu mengatur segalanya sebelum Anda menjalankan pekerjaan yang lama berjalan." - tidak, kamu bisa menggunakannya disown untuk mencapai ini. Lihat jawaban @ bassgey - Rich
setelah berjuang untuk belajar layar dan tmux .... byobu membawa air mata ke mataku - HDave
disown dan jika diperlukan saja Ctrl-z, kemudian bg untuk mendapatkannya dari terminal aktif dan ke latar belakang. Kemudian, disown. - mimoralea


Hei, sementara aku setuju layar itu adalah pilihan yang paling efektif. Anda dapat menggunakan vncserver dan kemudian memulai proses di atasnya.

Juga jika satu-satunya interes Anda adalah memiliki proses yang berjalan dan tidak perlu untuk mengendalikannya, dan yang paling penting Anda tidak menyadari bahwa Anda perlu menutup sesi dan Anda memiliki proses yang sudah berjalan, Anda tidak beruntung jika Anda menggunakan bash sebagai shell

Pertama Anda harus mengirim proses ke latar belakang dengan mengetik Ctrl + Z diikuti oleh bg% 1 (nomornya tergantung pada nomor pekerjaan, biasanya 1, tetapi Anda dapat dengan mudah menarik daftar menggunakan pekerjaan perintah)

Terakhir, panggil perintah yang ditolak (diikuti oleh jobid ... sama dengan perintah bg)

Ini akan menghapus hubungan orangtua-anak antara shell Anda dan proses di latar belakang, mencegahnya mati ketika shell Anda dihentikan.


7
2018-06-06 21:29



Jawaban ini yang terbaik! Kenapa semua orang membicarakannya screen, pertanyaan itu diajukan pasca-masuk acara, bagaimana menjaga proses berjalan, sekarang setelah masuk tapi sebelum memulai mereka. Jawaban bagus Jorge, Anda benar-benar telah membantu saya! :) - jwbensley
Secara sederhana bg (tanpa %1) cukup sering, karena defaultnya adalah pekerjaan saat ini - Walter Tross
Akan menyenangkan untuk memiliki jawaban komprehensif: A priori (pengaturan di muka): layar terminal ascii (lama), tmux (neewer); X windows: vnc (old, still maintained), xpra (lebih baru), dengan xpra menjadi tidak memiliki root. Sebuah posterior (bertahan setelah Anda mulai): ^ Z, tidak mengakui, ... Tapi saya terlalu malas untuk menyempurnakannya lebih dari ini. - Krazy Glew