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

Linux で Java アプリケーションをサービスとして実行する

ここに別の簡単なラッパーを書きました:

#!/bin/sh
SERVICE_NAME=MyService
PATH_TO_JAR=/usr/local/MyProject/MyJar.jar
PID_PATH_NAME=/tmp/MyService-pid
case $1 in
    start)
        echo "Starting $SERVICE_NAME ..."
        if [ ! -f $PID_PATH_NAME ]; then
            nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null &
            echo $! > $PID_PATH_NAME
            echo "$SERVICE_NAME started ..."
        else
            echo "$SERVICE_NAME is already running ..."
        fi
    ;;
    stop)
        if [ -f $PID_PATH_NAME ]; then
            PID=$(cat $PID_PATH_NAME);
            echo "$SERVICE_NAME stoping ..."
            kill $PID;
            echo "$SERVICE_NAME stopped ..."
            rm $PID_PATH_NAME
        else
            echo "$SERVICE_NAME is not running ..."
        fi
    ;;
    restart)
        if [ -f $PID_PATH_NAME ]; then
            PID=$(cat $PID_PATH_NAME);
            echo "$SERVICE_NAME stopping ...";
            kill $PID;
            echo "$SERVICE_NAME stopped ...";
            rm $PID_PATH_NAME
            echo "$SERVICE_NAME starting ..."
            nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null &
            echo $! > $PID_PATH_NAME
            echo "$SERVICE_NAME started ..."
        else
            echo "$SERVICE_NAME is not running ..."
        fi
    ;;
esac 

init.d の完全なチュートリアルはこちら、systemd (ubuntu 16+) のチュートリアルはこちら

出力ログが必要な場合は、2 を置き換えます

nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null &

の行

nohup java -jar $PATH_TO_JAR >> myService.out 2>&1&

簡単な解決策は、nohup を介して Java を実行し、PID をファイルに保存するスクリプト start.sh を作成することです。

nohup java -jar myapplication.jar > log.txt 2> errors.txt < /dev/null &
PID=$!
echo $PID > pid.txt

次に、停止スクリプト stop.sh がファイルから PID を読み取り、アプリケーションを強制終了します:

PID=$(cat pid.txt)
kill $PID

もちろん、プロセスが存在するかどうかの確認や pid.txt の削除など、いくつかの詳細は省略しています。


Linux サービスの初期化スクリプトは /etc/init.d に格納されます . /etc/init.d/skeleton をコピーしてカスタマイズできます ファイル、そして呼び出し

service [yourservice] start|stop|restart

http://www.ralfebert.de/blog/java/debian_daemon/ を参照してください。 Debian (つまり、Ubuntu も) 用ですが、より多くのディストリビューションに適合します。


Linux
  1. Linux OS サービス「dhcpd」

  2. Linux OS サービス「anacron」

  3. Linux OS サービス「iptables」

  1. Linux OS サービス「NetFS」

  2. Linux OS サービス「ldap」

  3. Linux OS サービス「yppasswdd」

  1. Linux OS サービス「xendomains」

  2. Linux OS サービス「nscd」

  3. Linux OS サービス「squid」