GNU/Linux >> Linux の 問題 >  >> Linux

Linux でのバックグラウンド プロセス

& を追加した後に行う必要がある重要なことが 1 つあります。 コマンドの最後に。プロセスはまだターミナルにリンクされています。 disown を実行する必要があります java コマンドを実行した後。

java -jar yourApp.jar > log.txt &
disown

これで、ターミナルを閉じることができます。


そのようなことを達成するには、いくつかの方法があります:

<オール>
  • nohup java -server myApplication.jar > /log.txt -これはかなり簡単です。アプリケーションをバックグラウンドに置くだけです。これは機能しますが、あまり良い方法ではありません。
  • シェル ラッパーと上記の OR デーモン アプリを使用します。このアプローチは、多くのオープン ソース プロジェクトで使用されており、ほとんどのシナリオに適しています。さらに、init.d に含めることができます 通常の開始、停止、およびステータスコマンドで必要な実行レベル。必要に応じて例を挙げます。
  • Java Service Wrapper または Apache Jakarta Commons Daemon を使用して、独自のデーモン サーバーを構築します。繰り返しますが、どちらも非常に人気があり、十分にテストされており、信頼性があります。 Linux と Windows の両方で利用できます。 Apache Commons のものは Tomcat サーバーで使用されます!さらに、アクマもいます。
  • 個人的には、将来このサーバーを使用する必要がある場合、および/またはクライアントやエンド ユーザーなどに配布する必要がある場合は、解決策 2 または 3 を使用します。 nohup 何かを実行する必要があり、問題のより複雑なソリューションを開発する時間がない場合に適しています。

    広告 2:

    多くのプロジェクトで使用されている最適なスクリプトは、ここにあります。

    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
    

    Linux
    1. Linuxエコーコマンド

    2. Linux の起動プロセス

    3. Linux の CreateProcess?

    1. Linux でのデーモンの作成

    2. Linux:サービスへの処理

    3. Linuxでバックグラウンドで実行されているプロセスが強制終了されました

    1. Linux –Linuxでプロセスを1つのCPUコアに制限する方法は??

    2. Linux での echo コマンドの例

    3. Linux プロセスの状態