Metode terbaik adalah memulai proses dalam terminal multiplexer. Atau Anda dapat membuat proses tidak menerima sinyal HUP.
Sebuah multiplexer terminal menyediakan "virtual" terminal yang berjalan independen dari "nyata" terminal (sebenarnya semua terminal saat ini adalah "virtual" tapi itu topik lain untuk hari lain). Terminal virtual akan tetap berjalan bahkan jika terminal Anda yang sebenarnya ditutup dengan sesi ssh Anda.
Semua proses yang dimulai dari terminal virtual akan terus berjalan dengan terminal virtual itu. Ketika Anda menyambung kembali ke server Anda dapat menyambung kembali ke terminal virtual dan semuanya akan seolah-olah tidak ada yang terjadi, selain waktu yang berlalu.
Dua multiplexer terminal yang populer adalah layar dan tmux .
Layar memiliki kurva belajar yang curam. Berikut ini adalah tutorial yang bagus dengan diagram yang menjelaskan konsep: http://www.ibm.com/developerworks/aix/library/au-gnu_screen/
The HUP sinyal (atau SIGHUP) dikirim oleh terminal untuk semua proses anak ketika terminal ditutup. Tindakan umum setelah menerima SIGHUP adalah untuk mengakhiri. Jadi ketika sesi ssh Anda terputus, semua proses Anda akan berakhir. Untuk menghindari ini, Anda dapat membuat proses Anda tidak menerima SIGHUP.
Dua metode mudah untuk melakukannya adalah nohup
dan disown
.
Untuk informasi lebih lanjut tentang bagaimana nohup
dan cara disown
kerjanya, baca 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 dengan mereka karena mereka tidak lagi melekat pada terminal apa pun. Metode ini terutama berguna untuk proses batch yang berjalan lama yang, setelah dimulai, tidak lagi memerlukan input pengguna.
screen
memberi Anda lebih banyak opsi, tetapi jika Anda menggunakanauthorized_keys
untuk memungkinkan orang menjalankan skrip dari jarak jauhssh
,nohup
opsinya adalah cara sederhana yang bagus untuk skrip untuk memulai proses yang lebih lama darissh
sesi yang digunakan untuk memulai mereka .Ada beberapa cara untuk melakukan ini, tetapi yang saya temukan paling berguna adalah dengan menggunakan Layar GNU .
Setelah Anda 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 (seperti pengguna yang sama yang membuat sesi).sumber
Dalam
bash
,disown
kata kunci sangat cocok untuk ini. Pertama, jalankan proses Anda di latar belakang (gunakan&
, atau^Z
ketikbg
):Dengan mengetik,
jobs
Anda dapat melihat bahwa proses tersebut masih dimiliki oleh shell: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:Anda dapat mengkonfirmasi ini:
Anda bahkan dapat menggabungkan
&
dandisown
pada baris yang sama, seperti:Ini lebih baik daripada berjalan
nohup
menurut saya karena tidak meninggalkannohup.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 latar belakang dan melepaskan tugas.sumber
Alat nohup, tersedia di sebagian besar kotak Linux akan melakukan ini.
sumber
Untuk lebih menyeluruh, saya akan tmux , yang memiliki ide dasar yang sama dengan layar:
Namun, kira-kira jauh lebih mudah untuk mencari di Google.
sumber
"gnu screen"
sebagai permintaan pencarian Anda bekerja dengan sangat baik.Layar berlebihan untuk hanya menjaga proses berjalan saat Anda logout.
Coba coba :
sumber
Berikut adalah cara untuk mengubah proses shell apa pun, tidak diperlukan program eksternal:
Ketika Anda kemudian menutup sesi Anda, pekerjaan akan terus berjalan sebagaimana dibuktikan oleh file output.txt (yang memiliki buffering sehingga dibutuhkan beberapa saat untuk menunjukkan bukan-nol). Jangan lupa untuk membunuh pekerjaan Anda setelah pengujian.
Jadi yang perlu Anda lakukan adalah menutup stdin dan latar belakang pekerjaan. Agar benar-benar bagus, pertama-tama
cd /
agar Anda tidak memegang tunggangan.Ini bekerja bahkan dalam sh sederhana di bawah Solaris.
sumber
-
operator? Apa perbedaan antara< /dev/null
dan&-
? Saya menduga bahwa STDIN (dan yang lainnya STDOUT dan STDERR) dapat ditugaskan baik oleh file< file
, atau streaming oleh<& stream
dalam kasus STDIN. Apakah itu sama dengan menggunakan< /dev/null
contoh Anda di atas? Dan apakah operator di-
atas menyebut null sebagai arus?The
at
perintah dapat berguna untuk situasi seperti ini. Misalnya, ketik:Dan Anda kemudian dapat memasukkan perintah atau serangkaian perintah yang akan dijalankan. Hasilnya harus dikirim melalui email kepada Anda, jika email sudah diatur dengan benar pada mesin.
Alih-alih
now
, Anda dapat menentukan waktu secara opsional dengan tanggal, atau ekspresi waktu sepertinow + 15 minutes
. Lihatman at
untuk lebih jelasnya.sumber
byobu
di Ubuntu adalah tampilan depan yang bagus untuk layar. Dengan menekan Ctrl- ?Anda mendapatkan daftar semua pintasan keyboard. Ini menambahkan status bar yang dapat berguna untuk menonton beban CPU, ruang disk, dll. Secara keseluruhan ini memberikan pengalaman yang akan saya gambarkan sebagai koneksi VNC berbasis terminal.nohup
memungkinkan memulai pekerjaan di latar belakang dengan outputnya dialihkan ke file log, yang selalu dapat dialihkan ke / dev / null jika tidak diperlukan.sumber