Bagaimana agar proses tetap berjalan setelah mengakhiri sesi ssh?
644
Katakanlah saya meluncurkan banyak proses dari sesi ssh. Apakah mungkin untuk mengakhiri sesi ssh sambil menjaga proses-proses tersebut berjalan pada mesin jarak jauh?
Anda harus mencari alternatif modern seperti tmux.
tmuxlebih unggul daripada screenbanyak alasan, berikut adalah beberapa contoh:
Windows dapat dipindahkan antar sesi dan bahkan ditautkan ke beberapa sesi
Windows dapat dipisah secara horizontal dan vertikal menjadi panel
Dukungan untuk terminal warna UTF-8 dan 256
Sesi dapat dikontrol dari shell tanpa perlu memasuki sesi
Fungsi Dasar
Untuk mendapatkan fungsionalitas yang sama seperti yang dijelaskan dalam jawaban yang merekomendasikan screen, Anda perlu melakukan hal berikut:
ssh ke mesin jarak jauh
mulai tmuxdengan mengetikkan tmuxke dalam shell
memulai proses yang Anda inginkan di dalam tmuxsesi yang dimulai
tinggalkan / lepaskan tmuxsesi dengan mengetik Ctrl+ blalud
Anda sekarang dapat keluar dengan aman dari mesin jarak jauh, proses Anda akan terus berjalan di dalam tmux. Ketika Anda kembali lagi dan ingin memeriksa status proses Anda, Anda dapat menggunakan tmux attachuntuk melampirkan ke tmuxsesi Anda .
Jika Anda ingin beberapa sesi berjalan berdampingan, Anda harus memberi nama setiap sesi menggunakan Ctrl+ bdan $. Anda bisa mendapatkan daftar sesi yang sedang berjalan menggunakan tmux list-sessions, sekarang lampirkan ke sesi berjalan dengan perintah tmux attach-session -t 0.
tmuxdapat melakukan banyak hal lebih maju daripada menangani satu jendela dalam satu sesi. Untuk informasi lebih lanjut lihat di man tmuxatau yang tmux halaman GitHub . Secara khusus, inilah FAQ tentang perbedaan utama antara screendan tmux.
@CraigM Gunakan screen -x -r [screenname]atau screen -rxsingkatnya jika Anda hanya memiliki satu sesi layar aktif. Ini memungkinkan Anda untuk melampirkan instance layar yang ada.
Lekensteyn
5
Saran ini membantu saya dengan masalah yang sama tetapi saya pikir itu termasuk salah ketik. Saya cukup yakin bahwa Anda perlu mengetik Ctrl-bdan kemudian duntuk meninggalkan / melepaskan tmuxsesi. Tentu saja itu adalah kasus untuk versi tmuxdi Ubuntu 12.04 saya.
cxrodgers
17
Saya membuat kesalahan saat mengikuti instruksi di atas. Saya akan membagikannya jika ada orang yang jatuh ke dalam kesalahan yang sama: Saya mulai tuxux di shell komputer saya sendiri dan bukannya shell komputer remote. Orang perlu memulai tmux di shell komputer remote.
Atau, jalankan tmux detachalih-alih mengetikctrl-b d
Andrew
305
Pilihan 1: nohup
Cara terbaik seringkali yang paling sederhana.
nohup long-running-command &
Itu dibuat khusus untuk ini, bahkan log stdout ke nohup.log.
man nohup
Pilihan 2: bg
Jika Anda ingin "latar belakang" beberapa tugas yang sudah berjalan, maka taruhan terbaik Anda adalah Ctrl+ Zkemudian jalankan
bg
untuk menempatkan tugas Anda yang terakhir ditangguhkan ke latar belakang, memungkinkannya untuk terus berjalan.
Maka quick disownharus menjaga proses berjalan setelah Anda keluar.
screendan yang lain bisa melakukannya, tapi bukan itu gunanya. Saya merekomendasikan nohupuntuk tugas-tugas yang Anda tahu akan Anda tinggalkan dan bguntuk tugas-tugas yang sudah Anda jalankan dan tidak ingin memulai kembali.
Perlu diingat, keduanya spesifik untuk bash. Jika Anda tidak menggunakan bash, maka perintahnya bisa berbeda.
Saya akan merekomendasikan untuk melakukandisown -h
Michele
Menariknya, layar dan tmux tidak berfungsi untuk penambang, tetapi juga pekerjaan
Yasin Okumuş
1
bg+ disowntidak bekerja untuk saya. Saya menjalankan skrip penerapan yang saya lupa untuk memulai di dalam tmux, dan perlu pergi lebih awal untuk rapat. Skrip terus menampilkan kemajuan ke shell. ctrl+zmenghentikan proses, mengembalikan saya ke bash. bgmelanjutkan proses, tetapi juga melanjutkan keluaran status ke bash, sehingga tidak mungkin untuk melihat apa yang saya ketik. Namun, sebuah disownperintah menghasilkan "disown: current: no job
like
ini tidak bekerja untuk saya dengan julia myFile.jlalasan apa pun. tmux benar-benar hebat.
kilgoretrout
Ini bekerja untuk saya, terima kasih banyak
Chad
207
Anda bisa melakukannya dengan menggunakan screen.
Ketik man screenuntuk mencari tahu lebih lanjut atau baca halaman manual layar ini .
Skenario sederhana:
ssh ke kotak remote Anda. Ketik screenKemudian mulailah proses yang Anda inginkan.
Tekan Ctrl- Alalu Ctrl- D. Ini akan "melepaskan" sesi layar Anda tetapi membiarkan proses Anda berjalan. Anda sekarang dapat keluar dari kotak remote.
Jika Anda ingin kembali lagi nanti, masuk lagi dan ketik screen -rIni akan "melanjutkan" sesi layar Anda, dan Anda dapat melihat output dari proses Anda.
Saya biasanya akan memberi nama sesi layar saya menggunakan screen -S nameuntuk membuatnya lebih mudah untuk terhubung ke yang benar nanti.
David Oneill
Tautannya
1
Secara pribadi, saya mengerjakan kotak tanpa perangkat lunak kontrol paket. Setelah menghabiskan sekitar setengah jam membangun dependensi untuk TMUX (yang secara pribadi saya punya pengalaman dan sukai) 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 -Ssebelum pergi dan screen -rketika 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
83
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 setiap jobspec dari tabel pekerjaan aktif. Jika -hopsi diberikan, pekerjaan tidak dihapus dari tabel, tetapi ditandai sehingga SIGHUP tidak dikirim ke pekerjaan jika shell menerima SIGHUP. Jika JOBSPEC tidak hadir, dan baik -amaupun -ropsi diberikan, pekerjaan saat ini digunakan. Jika tidak ada jobspec yang disediakan, -aopsi berarti menghapus atau menandai semua pekerjaan; yang -rpilihan tanpa JOBSPEC argumen membatasi operasi untuk menjalankan pekerjaan.
Dengan disown Anda dapat menutup terminal dan menjalankan proses pada mesin.
Ini juga cara favorit saya untuk melakukannya. Saya sering menggunakandisown -a && exit
Stefano Palazzo
1
Sempurna. Ini adalah perintah yang indah dan layak mendapatkan semua upvote!
Greg
8
Satu kata peringatan, saya menghentikan proses yang berjalan dengan Ctrl-Z dan tidak memulainya di latar belakang sebelum memanggil disowndan membunuhnya.
HDave
3
Dapat macet jika ingin menulis ke terminal. Mengarahkan output dari proses yang berjalan tidak mudah. Lebih baik memulainya dengan benar dengan nohup.
jiggunjer
2
Ini jawaban yang bagus, karena langsung menjawab pertanyaan. Penulis pertanyaan bertanya apa yang harus dilakukan setelah menjalankan banyak perintah yang sudah berjalan lama. Sebagian besar jawaban ini memberi tahu Anda apa yang harus dilakukan sebelum Anda menjalankan perintah.
q0rban
53
Saya terjebak dalam mv besar jadi saya tidak dalam posisi untuk menghentikan proses, pengaturan layar dan kemudian mulai lagi. Saya berhasil keluar dari sesi ssh dengan proses berjalan dengan dasarnya melakukan langkah-langkah berikut:
ssh [server]
perintah
Ctrl+Z
bg
disown [proses pid opsional, default ke bertahan]
keluar
Langkah 3 menjeda proses saat ini (mis. Perintah 'mv' saya).
Langkah 4 menempatkan proses yang dijeda ke latar belakang dan melanjutkannya.
Langkah 5 memungkinkan Anda menolak proses. ** Untuk mendapatkan daftar pekerjaan cukup ketik jobssebelumnya.
** Mengenai penolakan (dari manual bash):
disown [-ar] [-h] [jobspec ... | pid ... ]
Without options, remove each jobspec from the table of active
jobs. If jobspec is not present, and neither the -a nor the -r
option is supplied, the current job is used. If the -h option
is given, each jobspec is not removed from the table, but is
marked so that SIGHUP is not sent to the job if the shell
receives a SIGHUP. If no jobspec is supplied, the -a option
means to remove or mark all jobs; the -r option without a job‐
spec argument restricts operation to running jobs. The return
value is 0 unless a jobspec does not specify a valid job.
Built-in selalu menjadi pilihan pertama saya :) THX
ken_oy
Jawaban ini harus ditandai sebagai benar. Untuk menginstal dan membiasakan diri menyaring untuk memecahkan masalah ini berlebihan.
Ulrich-Lorenz Schlüter
Ini sangat membantu ketika Anda sudah memulai perintah apa pun dan yang sedang berjalan lama. Mengakhiri dan memulainya dalam Sesi TMUX akan memakan waktu
Deepali Mittal
1
@ tom-brossman: Harap perhatikan pengeditan yang tidak perlu seperti ini ! Jika dipanggil tanpa spesifikasi pekerjaan, disownperintah bawaan bekerja pada pekerjaan latar terbaru.
David Foerster
22
Ada dua program utama yang dapat Anda gunakan untuk mempertahankan program dan status terminal melalui beberapa koneksi ssh. Mereka layar (petahana, tapi sayangnya tidak terawat. Rupanya sedang aktif dikembangkan sekarang ) dan tmux (lebih baru, dipelihara secara aktif). Byobu adalah ujung depan yang dapat berjalan di atas sistem mereka dan menawarkan informasi status ubuntu tambahan. Pada instalasi baru ini akan menggunakan tmux sebagai backend, jika Anda memiliki instalasi byobu yang lebih lama dan konfigurasi yang ada akan mempertahankan backend sebelumnya, baik itu layar atau tmux.
Byobu
Byobu dapat diinstal di komputer dengan melakukannya di mesin berbasis Debian:
sudo aptitude install byobu
Menggunakan yum, Anda lakukan
su -c 'yum install byobu'
Dimungkinkan juga untuk menginstal byobu pada distribusi lain.
Menggunakan byobu
Anda dapat memulai byobu dengan menjalankan byobumesin host setelah terhubung menggunakan ssh. Ini akan memberi Anda shell yang terlihat seperti ini:
Anda juga dapat menggunakan Terminal Byobu pada mesin Ubuntu dengan opsi -X dan dengan mudah memiliki byobu yang berfungsi dengan baik.
Pemakaian:
Mulai byobu dengan mengetik byobu.
Anda dapat menekan F2 untuk membuat jendela baru di dalam sesi saat ini, F3-F4 untuk beralih di antara berbagai jendela.
Bagian terbaik tentang byobu adalah, Anda tidak harus benar-benar mematikan proses yang berjalan di terminal untuk meninggalkan terminal. Anda cukup mengirim layar / tmux (kerangka byobu) ke latar belakang dan melanjutkan saat berikutnya Anda datang:
Untuk meninggalkan byobu dan membiarkannya tetap berjalan (lepas) tekan F6.
Lain kali Anda datang, lakukan saja byobudan Anda sholud akan kembali tepat di tempat Anda berada.
Anda juga dapat membuat berbagai sesi byobu pada byobu -S session1dan seterusnya. Dan Anda dapat terhubung ke salah satu dari mereka ketika Anda kembali.
Anda dapat melakukan lebih banyak lagi dengan menggunakan Byobu. Gunakan! Beberapa panduan pasti ada di sini , atau di sini .
Saya mencoba menggunakan byobu dari sesi berbasis Putty ke kotak Ubuntu saya, tetapi saya mendapatkan baris status diulang dan bergulir di layar. Meskipun terlepas dengan benar ketika menekan F6, itu bukan solusi yang bisa digunakan dalam pengaturan saya.
jfmessier
1
@ jfmessier Itu karena Putty tidak menerima ncurses (utf-8 pada dasarnya) dengan baik. Dimungkinkan untuk menghilangkan masalah ini dengan mengikuti utas ini - stackoverflow.com/questions/10731099/...
SiddharthaRT
Ini luar biasa! 1. itu memberi saya bash prompt berwarna yang sepertinya saya tidak bisa aktifkan dengan bash sebagai shell default saya dan 2. saya bisa menjalankan 2 bot pada saat yang sama dan masih memiliki terminal lain untuk dikerjakan! @ SiddharthaRT Anda layak mendapat upvote Pak
Dev
18
Anda tidak dapat melakukan ini setelah proses dimulai, Anda harus mengatur semuanya sebelum menjalankan pekerjaan yang berjalan lama.
Anda dapat menggunakan nohup tetapi kebijaksanaan modern menyarankan Anda menggunakan layar atau byobu sebagai login Anda sehingga Anda dapat melepaskan dan membiarkan hal-hal berjalan.
Layar memiliki keuntungan yang dapat Anda lepaskan dari satu mesin dan pasang kembali dari yang lain yang berguna jika Anda ingin memeriksa proses yang berjalan lama yang berjalan di luar akhir hari kerja.
byobu menempatkan antarmuka yang mudah digunakan di atas layar dengan menu dll. Ini juga merupakan implementasi layar saat ini pada ubuntu yang lebih baru. F2 untuk memulai terminal baru F3 / F4 untuk beralih bolak-balik dan F6 untuk memutuskan sambungan. Ketik exit untuk benar-benar mengakhiri terminal secara permanen.
"Kamu tidak bisa melakukan ini setelah prosesnya dimulai, kamu harus mengatur semuanya sebelum menjalankan pekerjaan yang berjalan lama." - tidak, Anda dapat menggunakan disownuntuk mencapai ini. Lihat jawaban @ bassgey
Kaya
1
setelah berjuang untuk belajar layar dan tmux .... byobu membawa air mata ke mataku
HDave
disowndan jika dibutuhkan saja Ctrl-z, maka bguntuk mendapatkannya dari terminal aktif dan ke latar belakang. Lalu disown,.
mimoralea
8
Hai, sementara saya setuju bahwa layar adalah opsi yang paling efektif. Anda dapat menggunakan vncserver dan kemudian memulai proses di atasnya.
Juga jika interes Anda satu-satunya adalah agar proses berjalan dan tidak perlu mengambil kendali kembali, dan yang paling penting Anda tidak tahu Anda harus menutup sesi dan Anda memiliki proses sudah berjalan, Anda tidak beruntung jika Anda menggunakan bash sebagai shell
Pertama, Anda perlu mengirim proses ke latar belakang dengan mengetikkan Ctrl + Z diikuti oleh bg% 1 (jumlahnya tergantung pada nomor pekerjaan, biasanya itu adalah 1, tetapi Anda dapat dengan mudah menarik daftar menggunakan perintah pekerjaan)
Akhirnya jalankan perintah yang ditolak (diikuti oleh jobid ... sama seperti dengan perintah bg)
Ini akan menghapus hubungan orangtua-anak antara shell Anda dan proses di latar belakang, mencegahnya mati ketika shell Anda dihentikan.
Jawaban ini adalah yang terbaik! Mengapa semua orang berbicara screen, pertanyaannya adalah acara pasca-masuk, bagaimana menjaga proses berjalan, sekarang setelah masuk tetapi sebelum memulai mereka. Jawaban yang bagus Jorge, Anda benar-benar membantu saya! :)
jwbensley
1
Cukup bg(tanpa %1) sering kali cukup, karena default adalah pekerjaan saat ini
Walter Tross
Akan menyenangkan untuk memiliki jawaban yang komprehensif: A priori (pengaturan di muka): layar terminal ascii (lama), tmux (lebih baru); X windows: vnc (lama, masih dipertahankan), xpra (lebih baru), dengan xpra tidak dapat di-root. Seorang posterior (bertahan setelah Anda mulai): ^ Z, ditolak, ... Tapi saya terlalu malas untuk menyempurnakannya lebih dari ini.
Krazy Glew
8
Untuk skrip shell tunggal yang telah saya jalankan dalam jangka waktu yang lama, saya akan masuk, dan menjalankan proses di latar belakang menggunakan '&'.
Contoh:
/path/to/my/script &
Saya telah keluar dan memutus sesi SSH saya. Ketika saya masuk beberapa waktu kemudian, skrip masih dieksekusi sebagaimana dibuktikan dengan pengumpulan data terus menerus dari skrip.
Ya, saya ingin tahu bagaimana layar / tmux lebih baik daripada solusi sederhana ini.
Mads Skjern
Ya, saya dapat melihat ini di ubuntu saya juga, tetapi seharusnya tidak terjadi secara teori. Saya tidak mengerti mengapa
Daniel Pinyol
1
@MadsSkjern Karena Anda tidak dapat memasukkan input apa pun ke dalam skrip menggunakan metode ini.
Ken Sharp
1
@MadsSkjern alasannya adalah bahwa jika Anda menjalankan proses seperti ini dengan &jika Anda keluar dan masuk ke sesi SSH Anda, proses akan tetap berjalan namun Anda tidak akan dapat melihat output dari proses itu (jika skrip Anda menggemakan sesuatu yang Anda tidak akan melihatnya, tetapi jika menulis file file akan ada di sana)
DarkCygnus
4
Anda harus memeriksa Layar GNU dan melihat apakah itu membantu Anda. Bergantung pada bagaimana Anda membutuhkan aplikasi Anda untuk berjalan secara realtime, itu mungkin menyebabkan lebih banyak masalah daripada menyelesaikannya, tetapi setidaknya itu akan memungkinkan Anda untuk melanjutkan sesi Anda seolah-olah Anda tidak pernah meninggalkannya.
Cara Penggunaan :
Gunakan perintah screenuntuk mulai pertama, gulir melalui pesan pengantar, Anda harus menyerahkan terminal.
Ca Cc membuka terminal lain
Ca Ck membunuh terminal
Anda dapat menggunakan Ca C-Space dan Ca C-Backspace untuk menelusuri terminal
Ca Ca berguna jika Anda kebanyakan hanya menggunakan dua terminal
Ca Cd melepaskan sesi layar saat ini dan keluar dari layar. Anda kemudian dapat menggunakan screen -runtuk melanjutkan sesi itu. Anda dapat memiliki beberapa sesi layar terpisah sekaligus, dalam hal ini Anda akan ditampilkan daftar sesi yang tersedia.
Ada banyak opsi lain, misalnya layar split, dan juga semua pintasan dapat disesuaikan sepenuhnya.
Sementara semua orang mengatakan untuk menggunakan disown(satu-satunya pilihan yang Anda miliki setelah Anda memulai proses),, nohupatau bahkan menjalankan perintah screen, yang berguna jika Anda ingin melihat semua output dari perintah ... Saya penggemar screen.. Saya masih telah mencoba distribusi arus utama Linux dan hanya menempatkan pekerjaan di latar belakang dan berhenti tidak menyebabkan semua proses yang berjalan mati. Harus ada pengaturan global atau sesuatu. Saya mencoba ini pada beberapa sistem yang cukup lama (slackware 12) dan skrip pengujian saya terus berjalan sampai saya membunuhnya secara manual:
Meskipun saya setuju itu screenakan menjadi cara terbaik untuk menjalankan ini, bahkan jika skrip saya menulis untuk mencatat file atau apa pun .. Saya tidak pernah perlu menggunakan disown -a atau nohupkecuali itu keluar dari paranoia lengkap. Mungkin seseorang dapat menjelaskan bagaimana bash berperilaku secara default? Mungkin beberapa administrator sistem mengubah default pada shell besar untuk menjaga proses penggunanya dari overloading sistem?
Jika Anda memiliki pertanyaan lebih lanjut, silakan tanyakan sebagai pertanyaan baru
heemayl
0
Sayangnya, sesi SSH yang dihentikan dapat mengakibatkan tmux atau layar mati. Ini karena systemdakan menghentikan proses anak apa pun setelah keluar dari sesi.
Anda dapat mengubah pengaturan ini di logind.conf( /etc/systemd/logind.conf):
Jawaban:
Anda harus mencari alternatif modern seperti
tmux
.tmux
lebih unggul daripadascreen
banyak alasan, berikut adalah beberapa contoh:Fungsi Dasar
Untuk mendapatkan fungsionalitas yang sama seperti yang dijelaskan dalam jawaban yang merekomendasikan
screen
, Anda perlu melakukan hal berikut:tmux
dengan mengetikkantmux
ke dalam shelltmux
sesi yang dimulaitmux
sesi dengan mengetik Ctrl+ blaludAnda sekarang dapat keluar dengan aman dari mesin jarak jauh, proses Anda akan terus berjalan di dalam
tmux
. Ketika Anda kembali lagi dan ingin memeriksa status proses Anda, Anda dapat menggunakantmux attach
untuk melampirkan ketmux
sesi Anda .Jika Anda ingin beberapa sesi berjalan berdampingan, Anda harus memberi nama setiap sesi menggunakan Ctrl+ bdan
$
. Anda bisa mendapatkan daftar sesi yang sedang berjalan menggunakantmux list-sessions
, sekarang lampirkan ke sesi berjalan dengan perintahtmux attach-session -t 0
.tmux
dapat melakukan banyak hal lebih maju daripada menangani satu jendela dalam satu sesi. Untuk informasi lebih lanjut lihat diman tmux
atau yang tmux halaman GitHub . Secara khusus, inilah FAQ tentang perbedaan utama antarascreen
dantmux
.sumber
screen -x -r [screenname]
atauscreen -rx
singkatnya jika Anda hanya memiliki satu sesi layar aktif. Ini memungkinkan Anda untuk melampirkan instance layar yang ada.Ctrl-b
dan kemudiand
untuk meninggalkan / melepaskantmux
sesi. Tentu saja itu adalah kasus untuk versitmux
di Ubuntu 12.04 saya.tmux detach
alih-alih mengetikctrl-b d
Pilihan 1:
nohup
Cara terbaik seringkali yang paling sederhana.
Itu dibuat khusus untuk ini, bahkan log stdout ke
nohup.log
.Pilihan 2:
bg
Jika Anda ingin "latar belakang" beberapa tugas yang sudah berjalan, maka taruhan terbaik Anda adalah Ctrl+ Zkemudian jalankan
untuk menempatkan tugas Anda yang terakhir ditangguhkan ke latar belakang, memungkinkannya untuk terus berjalan.
Maka quick
disown
harus menjaga proses berjalan setelah Anda keluar.screen
dan yang lain bisa melakukannya, tapi bukan itu gunanya. Saya merekomendasikannohup
untuk tugas-tugas yang Anda tahu akan Anda tinggalkan danbg
untuk tugas-tugas yang sudah Anda jalankan dan tidak ingin memulai kembali.Perlu diingat, keduanya spesifik untuk bash. Jika Anda tidak menggunakan bash, maka perintahnya bisa berbeda.
sumber
disown -h
bg
+disown
tidak bekerja untuk saya. Saya menjalankan skrip penerapan yang saya lupa untuk memulai di dalam tmux, dan perlu pergi lebih awal untuk rapat. Skrip terus menampilkan kemajuan ke shell.ctrl+z
menghentikan proses, mengembalikan saya ke bash.bg
melanjutkan proses, tetapi juga melanjutkan keluaran status ke bash, sehingga tidak mungkin untuk melihat apa yang saya ketik. Namun, sebuahdisown
perintah menghasilkan "disown: current: no jobjulia myFile.jl
alasan apa pun. tmux benar-benar hebat.Anda bisa melakukannya dengan menggunakan
screen
.Ketik
man screen
untuk mencari tahu lebih lanjut atau baca halaman manual layar ini .Skenario sederhana:
ssh ke kotak remote Anda. Ketik
screen
Kemudian mulailah proses yang Anda inginkan.Tekan Ctrl- Alalu Ctrl- D. Ini akan "melepaskan" sesi layar Anda tetapi membiarkan 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.sumber
screen -S name
untuk membuatnya lebih mudah untuk terhubung ke yang benar nanti.screen -S
sebelum pergi danscreen -r
ketika kembali luar biasa!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.
Dengan disown Anda dapat menutup terminal dan menjalankan proses pada mesin.
sumber
disown -a && exit
disown
dan membunuhnya.Saya terjebak dalam mv besar jadi saya tidak dalam posisi untuk menghentikan proses, pengaturan layar dan kemudian mulai lagi. Saya berhasil keluar dari sesi ssh dengan proses berjalan dengan dasarnya melakukan langkah-langkah berikut:
Langkah 3 menjeda proses saat ini (mis. Perintah 'mv' saya).
Langkah 4 menempatkan proses yang dijeda ke latar belakang dan melanjutkannya.
Langkah 5 memungkinkan Anda menolak proses. ** Untuk mendapatkan daftar pekerjaan cukup ketik
jobs
sebelumnya.** Mengenai penolakan (dari manual bash):
sumber
disown
perintah bawaan bekerja pada pekerjaan latar terbaru.Ada dua program utama yang dapat Anda gunakan untuk mempertahankan program dan status terminal melalui beberapa koneksi ssh. Mereka layar (petahana, tapi sayangnya tidak terawat. Rupanya sedang aktif dikembangkan sekarang ) dan tmux (lebih baru, dipelihara secara aktif). Byobu adalah ujung depan yang dapat berjalan di atas sistem mereka dan menawarkan informasi status ubuntu tambahan. Pada instalasi baru ini akan menggunakan tmux sebagai backend, jika Anda memiliki instalasi byobu yang lebih lama dan konfigurasi yang ada akan mempertahankan backend sebelumnya, baik itu layar atau tmux.
Byobu
Byobu dapat diinstal di komputer dengan melakukannya di mesin berbasis Debian:
Menggunakan yum, Anda lakukan
Dimungkinkan juga untuk menginstal byobu pada distribusi lain.
Menggunakan byobu
Anda dapat memulai byobu dengan menjalankan
byobu
mesin host setelah terhubung menggunakan ssh. Ini akan memberi Anda shell yang terlihat seperti ini:Anda juga dapat menggunakan Terminal Byobu pada mesin Ubuntu dengan opsi -X dan dengan mudah memiliki byobu yang berfungsi dengan baik.
Pemakaian:
Mulai byobu dengan mengetik
byobu
.Anda dapat menekan F2 untuk membuat jendela baru di dalam sesi saat ini, F3-F4 untuk beralih di antara berbagai jendela.
Bagian terbaik tentang byobu adalah, Anda tidak harus benar-benar mematikan proses yang berjalan di terminal untuk meninggalkan terminal. Anda cukup mengirim layar / tmux (kerangka byobu) ke latar belakang dan melanjutkan saat berikutnya Anda datang:
Lain kali Anda datang, lakukan saja
byobu
dan Anda sholud akan kembali tepat di tempat Anda berada.Anda juga dapat membuat berbagai sesi byobu pada
byobu -S session1
dan seterusnya. Dan Anda dapat terhubung ke salah satu dari mereka ketika Anda kembali.Anda dapat melakukan lebih banyak lagi dengan menggunakan Byobu. Gunakan! Beberapa panduan pasti ada di sini , atau di sini .
sumber
Anda tidak dapat melakukan ini setelah proses dimulai, Anda harus mengatur semuanya sebelum menjalankan pekerjaan yang berjalan lama.
Anda dapat menggunakan nohup tetapi kebijaksanaan modern menyarankan Anda menggunakan layar atau byobu sebagai login Anda sehingga Anda dapat melepaskan dan membiarkan hal-hal berjalan.
Layar memiliki keuntungan yang dapat Anda lepaskan dari satu mesin dan pasang kembali dari yang lain yang berguna jika Anda ingin memeriksa proses yang berjalan lama yang berjalan di luar akhir hari kerja.
Ada panduan memulai yang wajar untuk menyaring di sini.
byobu menempatkan antarmuka yang mudah digunakan di atas layar dengan menu dll. Ini juga merupakan implementasi layar saat ini pada ubuntu yang lebih baru. F2 untuk memulai terminal baru F3 / F4 untuk beralih bolak-balik dan F6 untuk memutuskan sambungan. Ketik exit untuk benar-benar mengakhiri terminal secara permanen.
sumber
disown
untuk mencapai ini. Lihat jawaban @ bassgeydisown
dan jika dibutuhkan sajaCtrl-z
, makabg
untuk mendapatkannya dari terminal aktif dan ke latar belakang. Laludisown
,.Hai, sementara saya setuju bahwa layar adalah opsi yang paling efektif. Anda dapat menggunakan vncserver dan kemudian memulai proses di atasnya.
Juga jika interes Anda satu-satunya adalah agar proses berjalan dan tidak perlu mengambil kendali kembali, dan yang paling penting Anda tidak tahu Anda harus menutup sesi dan Anda memiliki proses sudah berjalan, Anda tidak beruntung jika Anda menggunakan bash sebagai shell
Pertama, Anda perlu mengirim proses ke latar belakang dengan mengetikkan Ctrl + Z diikuti oleh bg% 1 (jumlahnya tergantung pada nomor pekerjaan, biasanya itu adalah 1, tetapi Anda dapat dengan mudah menarik daftar menggunakan perintah pekerjaan)
Akhirnya jalankan perintah yang ditolak (diikuti oleh jobid ... sama seperti dengan perintah bg)
Ini akan menghapus hubungan orangtua-anak antara shell Anda dan proses di latar belakang, mencegahnya mati ketika shell Anda dihentikan.
sumber
screen
, pertanyaannya adalah acara pasca-masuk, bagaimana menjaga proses berjalan, sekarang setelah masuk tetapi sebelum memulai mereka. Jawaban yang bagus Jorge, Anda benar-benar membantu saya! :)bg
(tanpa%1
) sering kali cukup, karena default adalah pekerjaan saat iniUntuk skrip shell tunggal yang telah saya jalankan dalam jangka waktu yang lama, saya akan masuk, dan menjalankan proses di latar belakang menggunakan '&'.
Contoh:
Saya telah keluar dan memutus sesi SSH saya. Ketika saya masuk beberapa waktu kemudian, skrip masih dieksekusi sebagaimana dibuktikan dengan pengumpulan data terus menerus dari skrip.
sumber
&
jika Anda keluar dan masuk ke sesi SSH Anda, proses akan tetap berjalan namun Anda tidak akan dapat melihat output dari proses itu (jika skrip Anda menggemakan sesuatu yang Anda tidak akan melihatnya, tetapi jika menulis file file akan ada di sana)Anda harus memeriksa Layar GNU dan melihat apakah itu membantu Anda. Bergantung pada bagaimana Anda membutuhkan aplikasi Anda untuk berjalan secara realtime, itu mungkin menyebabkan lebih banyak masalah daripada menyelesaikannya, tetapi setidaknya itu akan memungkinkan Anda untuk melanjutkan sesi Anda seolah-olah Anda tidak pernah meninggalkannya.
Cara Penggunaan :
screen
untuk mulai pertama, gulir melalui pesan pengantar, Anda harus menyerahkan terminal.screen -r
untuk melanjutkan sesi itu. Anda dapat memiliki beberapa sesi layar terpisah sekaligus, dalam hal ini Anda akan ditampilkan daftar sesi yang tersedia.Ada banyak opsi lain, misalnya layar split, dan juga semua pintasan dapat disesuaikan sepenuhnya.
sumber
Jawaban paling sederhana ...
ctrl + z akan menunda program yang sedang berjalan
"bg" akan menjalankannya di latar belakang
sumber
disown
ataunohup
), ini biasanya tidak akan membuat proses berjalan setelah akhir sesi SSH.Cara termudah adalah dengan menjalankan perintah Anda di latar belakang
&
. Kemudian tulis saja:sumber
Sementara semua orang mengatakan untuk menggunakan
disown
(satu-satunya pilihan yang Anda miliki setelah Anda memulai proses),,nohup
atau bahkan menjalankan perintahscreen
, yang berguna jika Anda ingin melihat semua output dari perintah ... Saya penggemarscreen
.. Saya masih telah mencoba distribusi arus utama Linux dan hanya menempatkan pekerjaan di latar belakang dan berhenti tidak menyebabkan semua proses yang berjalan mati. Harus ada pengaturan global atau sesuatu. Saya mencoba ini pada beberapa sistem yang cukup lama (slackware 12) dan skrip pengujian saya terus berjalan sampai saya membunuhnya secara manual:Meskipun saya setuju itu
screen
akan menjadi cara terbaik untuk menjalankan ini, bahkan jika skrip saya menulis untuk mencatat file atau apa pun .. Saya tidak pernah perlu menggunakandisown -a
ataunohup
kecuali itu keluar dari paranoia lengkap. Mungkin seseorang dapat menjelaskan bagaimana bash berperilaku secara default? Mungkin beberapa administrator sistem mengubah default pada shell besar untuk menjaga proses penggunanya dari overloading sistem?sumber
Sayangnya, sesi SSH yang dihentikan dapat mengakibatkan tmux atau layar mati. Ini karena
systemd
akan menghentikan proses anak apa pun setelah keluar dari sesi.Anda dapat mengubah pengaturan ini di
logind.conf
(/etc/systemd/logind.conf
):Terima kasih untuk menjawab di https://unix.stackexchange.com/questions/490267 .
sumber
Dari pada :
Tambahkan sebelumnya
nohup
:Kemudian, Anda dapat melihat konsol stdout dengan:
sumber