Solusi 1:
Metode terbaik adalah memulai proses di terminal multiplexer. Atau Anda dapat membuat proses tidak menerima sinyal HUP.
Multiplexer terminal menyediakan terminal "virtual" yang berjalan independen dari terminal "nyata" (sebenarnya semua terminal saat ini adalah "virtual" tetapi itu adalah topik lain untuk hari lain). Terminal virtual akan tetap berjalan meskipun terminal asli Anda ditutup dengan sesi ssh Anda.
Semua proses yang dimulai dari terminal virtual akan tetap berjalan dengan terminal virtual tersebut. Saat Anda menyambung kembali ke server, Anda dapat menyambung kembali ke terminal virtual dan semuanya akan seolah-olah tidak terjadi apa-apa, selain waktu yang telah berlalu.
Dua multiplekser terminal yang populer adalah layar dan tmux.
Layar memiliki kurva belajar yang curam. Berikut adalah tutorial yang bagus dengan diagram yang menjelaskan konsepnya:http://www.ibm.com/developerworks/aix/library/au-gnu_screen/
Sinyal HUP (atau SIGHUP) dikirim oleh terminal ke semua proses anaknya saat terminal ditutup. Tindakan umum setelah menerima SIGHUP adalah mengakhiri. Jadi, ketika sesi ssh Anda terputus, semua proses Anda akan berhenti. Untuk menghindari hal ini, Anda dapat membuat proses Anda tidak menerima SIGHUP.
Dua metode mudah untuk melakukannya adalah nohup
dan disown
.
Untuk informasi selengkapnya tentang cara nohup
dan disown
bekerja membaca pertanyaan dan jawaban ini:https://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and
Catatan:meskipun proses akan tetap berjalan, Anda tidak dapat lagi berinteraksi dengannya karena tidak lagi terhubung ke terminal mana pun. Metode ini terutama berguna untuk proses batch yang berjalan lama, setelah dimulai, tidak lagi memerlukan masukan pengguna.
Solusi 2:
Ada beberapa cara untuk melakukannya, tetapi yang menurut saya paling berguna adalah menggunakan Layar GNU.
Setelah Anda ssh masuk, jalankan screen
. Ini akan memulai shell lain yang berjalan di dalam layar. Jalankan perintah Anda, lalu lakukan Ctrl -a d .
Ini akan "memutuskan" Anda dari sesi layar. Pada titik ini, Anda dapat keluar atau melakukan hal lain yang Anda inginkan.
Saat Anda ingin menyambung kembali ke sesi layar, jalankan saja screen -RD
dari prompt shell (sebagai pengguna yang sama yang membuat sesi).
Solusi 3:
Di bash
, disown
kata kunci sangat cocok untuk ini. Pertama, jalankan proses Anda di latar belakang (gunakan &
, atau ^Z
lalu ketik bg
):
$ wget --quiet http://server/some_big_file.zip &
[1] 1156
Dengan mengetikkan jobs
Anda dapat melihat bahwa proses tersebut masih dimiliki oleh shell:
$ jobs
[1]+ Running wget
Jika Anda keluar pada saat ini, tugas latar belakang juga akan terbunuh. Namun, jika Anda menjalankan disown
, bash melepaskan pekerjaan dan memungkinkannya untuk terus berjalan:
$ disown
Anda dapat mengonfirmasi ini:
$ jobs
$ logout
Anda bahkan dapat menggabungkan &
dan disown
pada baris yang sama, seperti:
$ wget --quiet http://server/some_big_file.zip & disown
$ logout
Ini lebih baik daripada menjalankan nohup
menurut saya karena tidak meninggalkan nohup.out
file berserakan di seluruh sistem file Anda. Juga, nohup
harus dijalankan sebelum Anda menjalankan perintah — disown
dapat digunakan jika Anda hanya memutuskan nanti bahwa Anda ingin membuat latar belakang dan melepaskan tugas.
Solusi 4:
Alat nohup, tersedia di sebagian besar kotak Linux akan melakukan ini.
Solusi 5:
Untuk lebih teliti, saya akan menunjukkan tmux, yang memiliki ide dasar yang sama dengan screen:
tmux dimaksudkan untuk menjadi alternatif modern, berlisensi BSD untuk program seperti layar GNU. Fitur utama meliputi:
- Antarmuka perintah yang andal, konsisten, terdokumentasi dengan baik, dan mudah dibuat skrip.
- Jendela dapat dibagi secara horizontal dan vertikal menjadi beberapa panel.
- Panel dapat dipindahkan dan diubah ukurannya dengan bebas, atau disusun menjadi tata letak prasetel.
- Dukungan untuk terminal UTF-8 dan 256 warna.
- Salin dan tempel dengan beberapa buffer.
- Menu interaktif untuk memilih jendela, sesi, atau klien.
- Ubah jendela saat ini dengan mencari teks di target.
- Penguncian terminal, secara manual atau setelah waktu habis.
- Basis kode berlisensi BSD yang bersih, mudah diperluas, sedang dalam pengembangan aktif.
Namun, ini jauh lebih mudah untuk ditelusuri di Google.