私はうまくいきますJavaソケットサーバー接続を開発しました。linuxのバックグラウンドプロセス
端末から起動されると、クライアントからのリッスンから開始されます。しかし、私が端末を閉じると、それは聞こえなくなります。
jarファイルが開始された場所のユーザーが端末を閉じても、続行する必要があります。
LinuxでJavaサーバーソケットアプリケーションをバックグラウンドプロセスとして実行するにはどうすればよいですか?
私はうまくいきますJavaソケットサーバー接続を開発しました。linuxのバックグラウンドプロセス
端末から起動されると、クライアントからのリッスンから開始されます。しかし、私が端末を閉じると、それは聞こえなくなります。
jarファイルが開始された場所のユーザーが端末を閉じても、続行する必要があります。
LinuxでJavaサーバーソケットアプリケーションをバックグラウンドプロセスとして実行するにはどうすればよいですか?
あなたがそのようなことを達成することができますいくつかの方法があります。
nohup java -server myApplication.jar > /log.txt
- これはかなり単純です。アプリケーションをバックグラウンドに置くだけです。これは動作しますが、そうするのは非常に良い方法ではありません。init.d
に含めることができ、通常の開始、停止、およびステータスコマンドで実行レベルが必要です。私は必要に応じて例を挙げることができます。あなたが将来的にこのサーバを使用し、および/またはクライアントに配布し、エンドユーザーが必要な場合は個人的に私はnohup
など、溶液2または3となるだろうあなたが何かを実行していない持っている必要があれば良いです問題のより複雑な解決策を開発する時間。
広告2:
最高のスクリプト、多くのプロジェクトで使用するには、hereを見つけることができます。
Debian/Ubuntuでは、start-stop-daemon
に基づいた非常に簡単なスクリプトを使用できます。疑問がある場合は/etc/init.d/skeleton
が修正できます。
#!/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
Rzanek Answer Answerありがとうございます。私はオプション2と一緒に行きたいと思っています。 – user861973
&をコマンドラインの最後に置いてみましたか?たとえば :
java -jar mySocketApp.jar &
またBGと背景と前景にプロセスを送信するためのコマンドFGを使用することができます。実行中のプロセスを一時停止するには、CTRL + Zを実行します。
この記事をそれをチェックアウト:http://lowfatlinux.com/linux-processes.html
試して、
java -jar yourApp.jar &
&
が、私はこれをテストしていませんが、新しいプロセス・スレッドを開始し、まだそれが動作しない場合は、スクリプトファイルでそれをtwiteとなります&
コマンドの最後に&
を追加した後に行う必要がある重要なことがあります。プロセスはまだ端末にリンクされています。 javaコマンドを実行した後にdisown
を実行する必要があります。
java -jar yourApp.jar > log.txt &
disown
ここで、端末を閉じることができます。
そのコマンドは私のためには機能しませんでした。 'java -jar yourApp .jar> log.txt& '最後に'& 'ではなくubuntuを使ってください。 – wired00
ここで必要なキーワードは、「プロセスをデーモン化する」ことです。 Linux/Unix上のシステムサーバープロセスがしばしば 'd'で終了するのはなぜだろうか? 'd'は歴史的な理由から「デーモン」の略です。
したがって、真のサーバープロセスを切り離してプロセスになるプロセスを「デーモン化」と呼びます。
これは完全に一般的であり、Javaプロセスだけに限定されません。
本当に独立したデーモンプロセスになるためには、いくつかの作業が必要です。それらはWikipediaのページに掲載されています。あなたが心配する必要がある2つの主なものはあり
:
を作成したttyから「daemonizing 「プロセス」では、これを達成するための一連の方法と、なぜそれが必要なのかについてさらに詳細な情報があります。
ほとんどの人は、ちょうど小さなシェルスクリプトを使ってJavaプロセスを起動し、Javaコマンドを '&'で終了してバックグラウンドモードで起動します。その後、起動スクリプト・プロセスが終了すると、Javaプロセスはまだ実行されており、今終了していないスクリプト・プロセスから切り離されます。
http://stackoverflow.com/questions/2151214/is-it-possible-to-double-fork-a-process-in-java – tMC