Ada satu hal penting yang perlu Anda lakukan setelah menambahkan &
di akhir perintah. Prosesnya masih terhubung ke terminal. Anda perlu menjalankan disown
setelah menjalankan perintah java.
java -jar yourApp.jar > log.txt &
disown
Sekarang, Anda dapat menutup terminal.
Ada beberapa cara untuk mencapai hal seperti itu:
nohup java -server myApplication.jar > /log.txt
- ini cukup lurus ke depan. Itu hanya akan menempatkan aplikasi di latar belakang. Ini akan berhasil tetapi itu bukan cara yang baik untuk melakukannya.- Gunakan pembungkus shell dan aplikasi OR daemon di atas. Pendekatan ini digunakan oleh banyak proyek sumber terbuka dan cukup bagus untuk sebagian besar skenario. Selain itu dapat disertakan dalam
init.d
dan diperlukan run level dengan perintah start, stop dan status reguler. Saya dapat memberikan contoh jika diperlukan. - Buat server daemon Anda sendiri menggunakan Java Service Wrapper atau Apache Jakarta Commons Daemon. Sekali lagi - keduanya sangat populer, teruji dengan baik, dan dapat diandalkan. Dan tersedia untuk Linux dan Windows! Yang dari Apache Commons digunakan oleh server Tomcat! Selain itu ada Akuma.
Secara pribadi saya akan menggunakan solusi 2 atau 3 jika Anda perlu menggunakan server ini di masa mendatang dan/atau mendistribusikannya ke klien, pengguna akhir, dll. nohup
bagus jika Anda perlu menjalankan sesuatu dan tidak punya waktu untuk mengembangkan solusi yang lebih rumit untuk masalah tersebut.
Iklan 2:
Skrip terbaik, yang digunakan oleh banyak proyek, dapat ditemukan di sini.
Untuk Debian/Ubuntu dapat menggunakan skrip yang sangat sederhana berdasarkan start-stop-daemon
. Jika ragu ada /etc/init.d/skeleton
seseorang dapat memodifikasi.
#!/bin/sh
DESC="Description"
NAME=YOUR_NAME
PIDFILE=/var/run/$NAME.pid
RUN_AS=USER_TO_RUN
COMMAND=/usr/bin/java -- -jar YOUR_JAR
d_start() {
start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE --chuid $RUN_AS --exec $COMMAND
}
d_stop() {
start-stop-daemon --stop --quiet --pidfile $PIDFILE
if [ -e $PIDFILE ]
then rm $PIDFILE
fi
}
case $1 in
start)
echo -n "Starting $DESC: $NAME"
d_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
d_stop
echo "."
;;
restart)
echo -n "Restarting $DESC: $NAME"
d_stop
sleep 1
d_start
echo "."
;;
*)
echo "usage: $NAME {start|stop|restart}"
exit 1
;;
esac
exit 0