Menjalankan aplikasi Java saat SSH ditutup di Google Cloud

12

Saat ini saya sedang menjalankan aplikasi Java dengan SSH-ing ke VM di Google Cloud Compute. Saya mengeluarkan perintah untuk menjalankan aplikasi dan memuat konsol. Segera setelah saya mengakhiri koneksi SSH, aplikasi dimatikan. Saya berasumsi ini karena konsol telah ditutup.

Saya ingin aplikasi ini (yang merupakan server) bertahan setelah saya menghentikan SSH, dan, pada titik mana pun, saya ingin dapat menyambung kembali ke konsol dan mengeluarkan perintah di server.

Nuhb32
sumber

Jawaban:

14

Anda menyatakan ini:

Saya ingin aplikasi ini (yang merupakan server) bertahan setelah saya menghentikan SSH, dan, pada titik mana pun, saya ingin dapat menyambung kembali ke konsol dan mengeluarkan perintah di server.

Golnya sedikit kabur, tapi aku akan menusuknya!

Untuk menjalankan perintah apa pun sebagai proses latar belakang pada server Linux, Anda harus menambahkan dulu perintah itu nohupdan menambahkannya &sampai akhir.

Jadi perintah terakhir adalah:

nohup [your command] &

The nohupberarti perintah harus mengabaikan “hang up” dan ampersand &ditambahkan untuk itu adalah perintah shell yang memberitahu sistem untuk menjalankan perintah sebagai proses latar belakang. Informasi lebih lanjut tentang penggunaannya dapat ditemukan di sini .

Ketika Anda menjalankan perintah seperti ini, proses akan berjalan, Anda akan dikirim kembali ke prompt perintah dan Anda dapat keluar dari sesi terminal atau bahkan pergi dan melakukan sesuatu yang tidak terkait dengan perintah itu selama sesi terminal itu.

JakeGould
sumber
1
Jika saya ingin kembali ke proses dan memasukkan perintah ke konsol java, bagaimana saya melakukannya?
Noahb32
1
@ Noahb32 Yah, ini akan meluncurkannya sebagai proses latar belakang; Saya kebanyakan menggunakan metode ini untuk hanya meluncurkan proses dan kemudian melupakannya. Jika Anda ingin memulai konsol Java baru, Anda bisa melakukannya karena Anda kembali ke shell. Tetapi mungkin Anda harus menyelidiki menggunakan screenkarena itu memungkinkan Anda untuk kembali ke sesi setelah peluncuran. Sejujurnya pertanyaan Anda tidak jelas, jadi jika Anda bisa mengklarifikasi, itu bisa membantu menyelesaikannya.
JakeGould
1
Terima kasih! Saya ingin menambahkan bahwa Anda dapat memonitor output dari terminal lain: jalankan saja tail -f nohup.outdalam pekerjaan yang sama. dir.
naXa
3

Setidaknya ada tiga cara untuk melakukan ini: nohup('no hang up'), screen/ tmux, atau disown. Ini sedikit tidak jelas dari pertanyaan Anda tentang kebutuhan Anda untuk terhubung ke server dan berinteraksi dengan daemon setelah Anda memutuskan sambungan.

Jika ini masalahnya, nohupdan disowntidak akan cocok dengan Anda saat melepaskan proses (meskipun terus berjalan). tmux(Dan juga screen) akan membuat istilah berjalan bahkan ketika Anda.

Untuk info lebih lanjut Anda dapat melihat halaman masing-masing:

man nohup
man tux

Bash disown (dengan asumsi Anda menjalankan Bash, meskipun banyak shell lain termasuk yang serupa)

pengguna1794469
sumber
Sepertinya tidak ada disownperintah di Google Cloud, setidaknya contoh yang saya gunakan, mulai 2019 atau akhir 2018. nohupPerintah itu berfungsi dengan baik, tetapi itu membuat file tambahan yang mungkin tidak diinginkan.
trysis
1

Untuk melepaskan aplikasi dari shell yang berjalan, membuatnya bertahan setelah shell keluar, gunakan nohupperintah.

Anda cukup awali perintah normal Anda dengan nohupdan itu akan berfungsi.

Julie Pelletier
sumber
0

Juga jika nohub tidak berfungsi, Anda dapat menggunakan layar :

 ssh into your remote box. 

ketik layar Kemudian mulailah proses yang Anda inginkan.

Press Ctrl-A then Ctrl-D. 

Ini akan melepaskan sesi layar Anda tetapi membiarkan proses Anda berjalan. Anda sekarang dapat keluar dari kotak remote.

If you want to come back later, log on again and type screen -r This will resume your screen session, and you can see the output

dari

proses Anda.

bluejayke
sumber