Bagaimana saya bisa menjaga proses tetap hidup setelah menutup sesi dempul?

41

Saya menggunakan dempul untuk berinteraksi dengan server Linux. Saya sudah memulai proses menggunakan dempul. Proses sedang berjalan dan akan memakan waktu 5-6 jam. Saya ingin proses itu tetap berjalan setelah saya menutup sesi dempul. Bagaimana saya bisa menjaga proses itu tetap hidup setelah menutup sesi dempul? Saya tidak ingin komputer ON terus sepanjang waktu. Apakah ada cara untuk melakukan ini?

prakash.panjwani
sumber

Jawaban:

32

Saya menggunakan layar untuk hal-hal semacam itu. Sebenarnya kadang-kadang saya hanya membiarkannya sebentar sehingga saya bisa kembali ke apa yang saya lakukan.

ziya
sumber
Proses sedang berjalan sekarang, apakah berhasil untuk proses itu? Saya bertanya karena prosesnya di tengah dan saya tidak ingin memulai kembali sekarang
+1 untuk menyebutkan alat baris perintah favorit saya yang tidak perlu. Ini permata dalam situasi seperti ini.
Noufal Ibrahim
@Noufal, benar-benar! @prakash, Anda harus menjalankan layar sebelum dapat memulai proses apa pun
ziya
Jika Anda ingin terhubung ke beberapa mesin, itu bisa menjadi ide bagus untuk menjalankan beberapa layar di dalam layar pertama sehingga Anda hanya perlu terhubung ke satu layar untuk mendapatkan akses ke semua remote yang sedang Anda jalankan.
tautan tidak berfungsi lagi
Malky.Kid
31
^Z
bg %1
disown -h %1

'-H' membuat proses tersebut kebal terhadap SIGHUP saat sesi selesai.

Tom Anderson
sumber
3
Perhatikan bahwa tidak ada cara untuk 'terkenal' atau 'mengadopsi' proses - setelah Anda melakukan ini, Anda tidak akan pernah bisa membawanya kembali ke latar depan. Jika prosesnya adalah pekerjaan batch yang berfungsi untuk menghasilkan beberapa file, itu tidak masalah.
19

Gunakan nohupperintah. Awali saja ke perintah Anda dan itu akan membuat daemonise mereka sehingga mereka tidak akan berhenti ketika Anda log off / mengakhiri sesi shell Anda. Output standar secara default akan berada dalam file bernama nohup.out. Periksa halaman manual nohup(1)untuk informasi lebih lanjut.

Noufal Ibrahim
sumber
proses sedang berjalan, apakah itu berfungsi untuk proses itu? Saya bertanya karena prosesnya sedang dan saya tidak ingin memulai kembali sekarang?
Terlambat ... setidaknya, untuk operasi normal. Sama sekali tidak mengejutkan untuk menemukan bahwa jika Anda melampirkan debugger ke proses, dan kemudian men-tweak dengan set panggilan sistem yang sesuai, maka mungkin Anda bisa meletakkannya di latar belakang. Tapi bukan itu yang bisa direkomendasikan - saya tidak akan repot, misalnya, dan saya punya setidaknya beberapa ide tentang apa yang mungkin terlibat. Anda memiliki dua pilihan sekarang ... tetap terhubung sampai selesai, atau hentikan proses saat ini, dan mulai kembali yang baru menggunakan nohup.
Jonathan Leffler
1
Jika Anda menggunakan bash (dan saya pikir zsh), Anda dapat menggunakan solusi dan disownproses Tom Anderson sehingga terus berjalan bahkan ketika Anda memutuskan sambungan.
Noufal Ibrahim
Yup - disown tampaknya menjadi cara untuk pergi untuk pekerjaan yang sudah berjalan. Itu bisa dilakukan karena shell yang memulai pekerjaan dapat memanipulasi properti yang dibutuhkan.
Jonathan Leffler
5

Mulai proses dengan nohup "processname" &. Anda juga dapat melepaskannya dengan screenatau tmux.

Damir
sumber
3

Solusi di atas dijelaskan dengan cukup baik, namun, tidak ada yang bekerja untuk saya SAMPAI Saya juga mengedit konfigurasi Putty ke:

Aktifkan TCP keepalives (opsi SO_KEEPALIVE)

Saya belum melihat ini di tempat lain, dan hanya menemukannya dengan coba-coba.

pengguna295374
sumber
1

Ctrl + z Kirim proses saat ini ke latar belakang.

Juga, Anda dapat menambahkan & di akhir perintah Anda untuk berjalan di latar belakang

BarsMonster
sumber
4
Biasanya, control-z menempatkan proses ke dalam animasi yang ditangguhkan; perintah bg meletakkannya di latar belakang. Namun, itu juga menjaga proses yang melekat pada terminal, sedangkan nohup melepaskannya dari terminal dan oleh karena itu memungkinkan dempul untuk memutuskan dan proses untuk bertahan dari pemutusan.
Jonathan Leffler
Saya menemukan bahwa menggunakan '&' untuk mengirim ke latar belakang berfungsi dengan dempul, tetapi ketika saya terhubung menggunakan ssh langsung dari shell, jika saya menutup koneksi, proses latar belakang mati. Ada yang tahu kenapa?
Zardoz89
0

Jika Anda ingin program yang terkandung dalam proses selalu atau sering berjalan di latar belakang, Anda dapat mengkodekannya agar terpisah dari terminal pengendali (jadikan perilaku seperti itu dapat dikontrol melalui flag opsi) dan jalankan di latar belakang.

Itu solusi jangka panjang, tentu saja, bukan untuk proses yang sedang berjalan.

mpez0
sumber
0

Anda dapat menggunakan &setelah tautan.

Contoh:

[localhost ~ ]# wget http://www.link.com/download/download.zip &
codemania
sumber
Pertanyaannya bukan tentang tautan, maksud Anda menambahkan &tanda setelah baris perintah?
Danny
0

Cara menjaga agar weblogic berjalan setelah menutup jendela dempul:

Langkah Sederhana: setelah login melalui dempul ikuti langkah-langkah di bawah ini:

  1. Pergi ke direktori di server tempat startWebLogic.shperintah berada.
  2. Ketik perintah screendan tekan Enter(layar baru akan terbuka).
  3. Di layar baru ketik perintah jalankan Anda ./startWebLogic.sh.
  4. Tekan Ctrl+ alalu tekan d(tanpa menahan Ctrl); Anda akan kembali ke layar sebelumnya.
  5. Saat Anda ingin kembali ke layar log server Anda, ketikkan perintah screen -r.
Akbar
sumber
0

jika prosesnya adalah untuk nodejs, dan itu mungkin niat Anda sejak Anda memposting ini pada stackoverflow. Saya awalnya mencari pertanyaan ini sendiri. Saya menemukan pm2 dan itu luar biasa. Jawaban lain mungkin membantu untuk dempul umum tetapi jika ini adalah node spesifik, ini adalah jawaban terbaik, karena ada dibangun dalam pemantauan dan setup hanyalah sebuah

$ npm install pm2 -g
$ cd yourappdirectory

"PM2 adalah manajer proses produksi untuk aplikasi Node.js dengan penyeimbang beban bawaan. Ini memungkinkan Anda untuk menjaga aplikasi tetap hidup selamanya, memuatnya kembali tanpa downtime dan untuk memudahkan tugas-tugas admin sistem umum.

Memulai aplikasi dalam mode produksi semudah: "

$ pm2 start yourappname.js

"Menggunakan perintah save dan kemudian membekukan Anda mengaktifkan proses untuk memulai kembali secara otomatis"

$ pm2 save
$ pm2 freeze

untuk memantau

$ pm2 monit

dan memulai kembali

$ pm2 restart yourappname

juga untuk informasi logging langsung

$ pm2 logs

Saya sekarang dapat dengan mudah menjalankan dua jendela dempul alih-alih menggunakan jendela peramban digialocean (yang tidak dapat saya gulir ke atas); Untuk info lebih lanjut lihat github utama

https://github.com/Unitech/pm2

itu luar biasa.

solusi mudah
sumber
Bisakah Anda jelaskan lebih banyak tentang apa pm2 itu dan apa perintah yang Anda lakukan? Tolong jangan menanggapi dalam komentar; edit  jawaban Anda untuk membuatnya lebih jelas dan lebih lengkap.
G-Man Mengatakan 'Reinstate Monica'
Menambahkan sedikit dokumentasi untuk komunitas. Saya berharap saya akan menemukan PM2 tahun yang lalu.
solusi mudah