Saya telah menulis aplikasi server Java yang berjalan pada solusi Linux standar virtual host. Aplikasi berjalan setiap saat mendengarkan koneksi soket dan membuat penangan baru untuk mereka. Ini adalah implementasi sisi server ke aplikasi client-server.
Cara saya memulainya adalah dengan memasukkannya dalam skrip start up rc.local dari server. Namun begitu mulai, saya tidak tahu cara mengaksesnya untuk menghentikannya dan jika saya ingin menginstal pembaruan, jadi saya harus me-restart server untuk me-restart aplikasi.
Pada PC windows, untuk jenis aplikasi ini saya dapat membuat layanan windows dan kemudian saya dapat berhenti dan memulainya seperti yang saya inginkan. Apakah ada yang seperti itu pada kotak Linux sehingga jika saya memulai aplikasi ini saya dapat menghentikannya dan memulai kembali tanpa melakukan restart lengkap dari server.
Aplikasi saya disebut WebServer.exe. Itu dimulai pada startup server dengan memasukkannya di rc.local saya seperti:
java -jar /var/www/vhosts/myweb.com/phpserv/WebServer.jar &
Saya sedikit noob di Linux sehingga contoh apa pun akan dihargai dengan tulisan apa pun. Namun saya memiliki SSH, dan akses FTP penuh ke kotak untuk menginstal pembaruan apa pun serta akses ke panel Plesk.
Solusi sederhana adalah membuat skrip start.sh yang menjalankan Java melalui nohup dan kemudian menyimpan PID ke file:
Maka skrip stop Anda stop.sh akan membaca PID dari file dan mematikan aplikasi:
Tentu saja saya telah meninggalkan beberapa detail, seperti memeriksa apakah prosesnya ada dan menghapus
pid.txt
jika Anda sudah selesai.sumber
Skrip init layanan Linux disimpan ke dalam
/etc/init.d
. Anda dapat menyalin dan menyesuaikan/etc/init.d/skeleton
file, lalu memanggillihat http://www.ralfebert.de/blog/java/debian_daemon/ . Ini untuk Debian (jadi, Ubuntu juga) tetapi lebih cocok untuk distribusi.
sumber
Mungkin bukan solusi dev-ops terbaik, tetapi bagus untuk penggunaan umum server untuk pesta lan atau sejenisnya.
Gunakan
screen
untuk menjalankan server Anda dan kemudian lepaskan sebelum logout, ini akan membuat proses berjalan, Anda kemudian dapat melampirkan kembali pada titik mana pun.Alur kerja:
Mulai layar:
screen
Mulai server Anda:
java -jar minecraft-server.jar
Lepaskan dengan menekan:
Ctl-a
,d
Pasang kembali:
screen -r
Info lebih lanjut di sini: https://www.gnu.org/software/screen/manual/screen.html
sumber
Alternatif lain, yang juga cukup populer adalah Java Service Wrapper . Ini juga cukup populer di komunitas OSS.
sumber
Mengacu pada aplikasi Spring Boot sebagai Layanan juga, saya akan menggunakan
systemd
versi ini, karena ini adalah yang termudah, paling tidak bertele-tele, dan paling baik diintegrasikan ke dalam distro modern (dan bahkan yang tidak begitu modern seperti CentOS 7.x).sumber
Cara termudah adalah menggunakan
supervisord
. Silakan lihat detail selengkapnya di sini: http://supervisord.org/Info lebih lanjut:
/ubuntu/779830/running-an-executable-jar-file-when-the-system-starts/852485#852485
https://www.digitalocean.com/community/tutorials/how-to-install-and-manage-supervisor-on-ubuntu-and-debian-vps
sumber
Berikut ini contoh skrip shell (pastikan Anda mengganti nama MATH dengan nama aplikasi Anda):
sumber
Dari aplikasi Spring Boot sebagai Layanan , saya dapat merekomendasikan
supervisord
aplikasi berbasis Python . Lihat pertanyaan stack overflow untuk informasi lebih lanjut. Ini sangat mudah untuk diatur.sumber
supervisord
sangat bagus, bagi mereka yang tidak tahu, ini memungkinkan layanan pemantauan (yang harusforeground
- tidakdaemonized
), maka layanan restart otomatis (dan dapat mengirim email peringatan ketika restart terjadi melalui plugin)Jawaban lain melakukan pekerjaan yang baik dengan memberikan skrip dan pengaturan khusus tergantung pada platform Anda. Selain itu, berikut adalah program dewasa, tujuan khusus yang saya tahu:
sumber
Anda dapat menggunakan server hemat atau JMX untuk berkomunikasi dengan layanan Java Anda.
sumber
Dari Panduan Referensi Boot Musim Semi
Lanjutkan membaca untuk mengetahui cara mengamankan layanan yang digunakan.
Setelah melakukan seperti yang tertulis, saya menemukan bahwa layanan saya gagal memulai dengan pesan kesalahan ini dalam log: start-stop-daemon: opsi tidak dikenal --no-close . Dan saya sudah berhasil memperbaikinya dengan membuat file konfigurasi
/var/myapp/myapp.conf
dengan konten berikutsumber
Saya memiliki aplikasi java Netty dan saya ingin menjalankannya sebagai layanan dengan systemd. Sayangnya aplikasi berhenti tidak peduli apa Jenis yang saya gunakan. Pada akhirnya saya sudah mulai membungkus java di layar. Berikut adalah file konfigurasi:
layanan
Mulailah
dari titik itu Anda dapat menggunakan
systemctl [start|stop|status] service
.sumber
Untuk menjalankan kode Java sebagai daemon (layanan) Anda dapat menulis rintisan berbasis JNI.
http://jnicookbook.owsiak.org/recipe-no-022/
untuk kode sampel yang didasarkan pada JNI. Dalam hal ini Anda daemonize kode yang dimulai sebagai Java dan loop utama dieksekusi dalam C. Tetapi juga dimungkinkan untuk menempatkan loop layanan utama, daemon, di dalam Java.
https://github.com/mkowsiak/jnicookbook/tree/master/recipes/recipeNo029
Bersenang-senang dengan JNI!
sumber
Anda dapat menulis skrip berhenti sederhana yang menangkap proses java Anda, mengekstrak PID dan memanggil kill di atasnya. Itu tidak mewah, tapi lurus ke depan. Sesuatu seperti itu mungkin bisa membantu sebagai permulaan:
sumber
pkill nameofprocess
melakukan hal yang sama?Dimungkinkan untuk menjalankan perang sebagai layanan Linux, dan Anda mungkin ingin memaksa dalam file pom.xml Anda sebelum pengemasan, karena beberapa distro mungkin tidak mengenali dalam mode otomatis. Untuk melakukannya, tambahkan properti berikut di dalam plugin spring-boot-maven-plugin.
Selanjutnya, atur init.d Anda dengan:
dan Anda akan dapat berlari
Ada banyak opsi lain yang dapat Anda temukan di dokumentasi Spring Boot , termasuk layanan Windows.
sumber