Saya perlu menjalankan program java di server universitas saya. Saya login melalui server mereka dari jarak jauh melalui ssh
Jadi saya menggunakan nohup seperti ini:
nohup java -jar project.jar &
Namun ketika saya keluar dan menutup terminal kemudian masuk kembali ke server proses saya hilang / terbunuh.
stdout
danstderr
ke beberapa file - proses Anda mungkin terbunuh oleh sinyal selain SIGHUP, ketika mencoba menulis ke terminal tertutupstdout
/stderr
. Misalnya, tambahkan>/dev/null 2>&1
perintah Anda sebelum&
tanda pekerjaan.nohup
- sebagian besar implementasi akan melakukan ini secara default meskipun mungkin perlu untuk mengarahkanstdin
misalnya</dev/null
.Jawaban:
nohup
hanya membuat program kebal terhadapSIGHUP
danSIGQUIT
sinyal. Shell modern mungkin mengirim sinyal lain ketika Anda logout dari sesi Anda, jadi tidak ada jaminan bahwa program Anda tidak terbunuh, bahkan berjalan di bawahnohup
.Solusi yang lebih baik adalah menggunakan
tmux
atauscreen
, atau jika Anda menggunakanbash
, Anda dapat mencoba:sumber
disown
, Anda perlu mengarahkan ulang secara manual, mis. Tambahkan</dev/null &>/dev/null
ssh localhost 'sleep 10m & disown'
.bash
tidak akan keluar.ssh
tidak keluar jika ada program yang terhubung ke terminal. Namun, di atas baik-baik saja jika Anda menjalankan secara interaktif.nohup
tidak membuat perintah kebalSIGQUIT
, tetapi hanya untukSIGHUP
. Itu akan secara eksplisit bertentangan dengan standar dan AFAIK hanya dapat terjadi pada (beberapa versi?) Solaris.Namun pilihan lain di tempat (disfungsional kronis)
nohup
:Ini secara efektif "daemonisasi" proses. Sekarang dimiliki oleh init, jadi tidak akan pernah mendapatkan HUP, stream I / O-nya aman, dan telah bercabang-cabang ke latar belakang.
Lihat
man setsid
untuk informasi lebih lanjut. Tidak sepertiscreen
atautmux
, ini bukan program yang mengklaim kepemilikan dan terus berjalan. Ini hanya memulai program dalam grup prosesnya sendiri .sumber
setsid
ini adalah bukti yang lebih bodoh seperti ini. Itu melompati langkah yang tersirat oleh nohup (memiliki proses yang kembali diasuh oleh init sebagai anak yatim).nohup
akan lebih fleksibel jika Anda berpotensi ingin melamar pekerjaan nanti.Gagasan lain adalah menggunakan perintah layar. Dimungkinkan untuk memulai program dengan layar, lepaskan dan logout. Setelah itu Anda dapat masuk dan melampirkan ke sesi layar yang sedang berjalan.
Tutorial: http://www.rackaid.com/blog/linux-screen-tutorial-and-how-to/
sumber
Coba jalankan nohup Anda dengan STDOUT dan STDERR redirect ke null:
sumber
nohup.out
).nohup java -jar project.jar 2>/dev/null &
tetapi Anda jelas tidak tahu apa yang Anda lakukan. Bahkan lebih baik, beri makanstdin
/dev/null
.