私はJava正常に動作しているソケットサーバー接続を開発しました。
端末から起動すると、クライアントからのリッスンから起動します。しかし、端末を閉じると、リスニングが停止します。
Jarファイルが開始された場所からユーザーが端末を閉じても、続行する必要があります。
LinuxでバックグラウンドプロセスとしてJavaサーバーソケットアプリケーションを実行するにはどうすればよいですか?
そのようなことを実現する方法はいくつかあります。
Nohup Java -server myApplication.jar > /log.txt
-これは非常に簡単です。アプリケーションをバックグラウンドに置くだけです。これは機能しますが、そうするのにあまり良い方法ではありません。init.d
に含まれており、定期的な開始、停止、およびステータスコマンドで必要な実行レベル必要に応じて例を提供できます。個人的には、将来このサーバーを使用したり、クライアントやエンドユーザーなどに配布したりする必要がある場合は、ソリューション2または3を使用します。何かを実行する必要があり、時間がない場合は、Nohup
問題に対するより複雑なソリューションを開発する。
広告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
コマンドの最後に&
を追加した後に行う必要がある重要なことが1つあります。プロセスはまだターミナルにリンクされています。 Javaコマンドを実行した後、disown
を実行する必要があります。
Java -jar yourApp.jar > log.txt &
disown
これで、ターミナルを閉じることができます。
ここで必要なキーフレーズは、「プロセスのデーモン化」です。 Linux/Unixでシステムサーバープロセスが「d」で終わることが多い理由を疑問に思ったことはありませんか? 「d」は、歴史的な理由から「デーモン」の略です。
したがって、切り離して真のサーバープロセスになるプロセスを「デーモン化」と呼びます。
これは完全に一般的なものであり、Javaプロセスに限定されません。
真に独立したデーモンプロセスになるために必要なタスクがいくつかあります。ウィキペディアのページにリストされています。
心配する必要がある2つの主なものは次のとおりです。
「プロセスのデーモン化」というフレーズをグーグルで検索すると、これを達成するための多くの方法と、それが必要な理由に関する詳細が見つかります。
ほとんどの人は、小さなシェルスクリプトを使用してJavaプロセスを開始し、その後、Javaコマンドを '&'で終了してバックグラウンドで開始します。次に、起動スクリプトプロセスが終了すると、Javaプロセスはまだ実行中であり、現在は停止しているスクリプトプロセスから切り離されます。
コマンドラインの最後に&を付けてみましたか?例えば:
Java -jar mySocketApp.jar &
bgおよびfgコマンドを使用して、プロセスをバックグラウンドに送信することもできます。前景。 CTRL + Zで実行中のプロセスを一時停止できます。
この記事をご覧ください: http://lowfatlinux.com/linux-processes.html
試して、
Java -jar yourApp.jar &
&
は新しいプロセススレッドを開始します。これはテストしていませんが、それでも動作しない場合は、スクリプトファイルでそれを繰り返し、&
でiを開始します
ステップ1。
新しい画面を作成するには
_screen -RD screenname
_
ステップ2。
スクリーン端末に入るには
_press Enter
_
ステップ3。
新しく開いたターミナルで(バックグラウンドで実行するために)コマンドまたはスクリプトを実行します
ステップ4。
スクリーン端末から出てくるには
_ctrl + A + D
_
ステップ5。
画面端末を一覧表示するには
_screen -ls
_
それは以下のようなものを印刷します
There is a screen on: 994.screenname (12/10/2018 09:24:31 AM) (Detached) 1 Socket in /run/screen/S-contact.
ステップ6。
バックグラウンドプロセスにログインするには
_screen -rd 994.screenname
_