web-dev-qa-db-ja.com

Linux:サービスへのプロセス

Linux実行可能ファイルをサービスとして作成しようとしています

以下のようにプログラムを実行します

Java -jar mytestprogram.jar

連続して実行され、RESTリクエストを処理するプロセスを作成します。しかし、できるサービスとして実行したい

service mytestprogram start
service mytestprogram stop
service mytestprogram status
chkconfig mytestprogram on

など。それを行う最も簡単な方法は何ですか?

47
yalkris

それはシステム管理者に依存します

debian/ubuntuでこれを行う最も一般的な方法は、initscriptをビルドして/etc/init.dまたは/etc/rc/init.dに配置し、その中にmytestprogramという名前のスクリプトを配置することです。

これはinitscriptの例です:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          testone
# Required-Start:    $local_fs
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     false
# Short-Description: Example init script
# Description:       Start/stop an example script
### END INIT INFO

DESC="test script"
NAME=testone
#DAEMON=

do_start()
{
   echo "starting!";
}

do_stop()
{
   echo "stopping!"
}


case "$1" in
   start)
     do_start
     ;;
   stop)
     do_stop
     ;;
esac

exit 0

そのディレクトリでいくつかのスクリプトを調べることをお勧めします。bashを少し知っていれば簡単です;)

53
SpectralWave

サンプルのシェルスクリプトを次に示します(MAT名をアプリケーションの名前に置き換えてください)。

私のスクリプトの最新バージョンと、それを必要とする人を助けるための簡単な説明を使って、GitHubGistを1つ作成します。 GitHub Gistリンク

#!/bin/bash

### BEGIN INIT INFO
# Provides:                 MATH
# Required-Start:           $Java
# Required-Stop:            $Java
# Short-Description:        Start and stop MATH service.
# Description:              -
# Date-Creation:            -
# Date-Last-Modification:   -
# Author:                   -
### END INIT INFO

# Variables
PGREP=/usr/bin/pgrep
Java=/usr/bin/Java
ZERO=0

# Start the MATH
start() {
    echo "Starting MATH..."
    #Verify if the service is running
    $PGREP -f MATH > /dev/null
    VERIFIER=$?
    if [ $ZERO = $VERIFIER ]
    then
        echo "The service is already running"
    else
        #Run the jar file MATH service
        $Java -jar /opt/MATH/MATH.jar > /dev/null 2>&1 &
        #sleep time before the service verification
        sleep 10
        #Verify if the service is running
        $PGREP -f MATH  > /dev/null
        VERIFIER=$?
        if [ $ZERO = $VERIFIER ]
        then
            echo "Service was successfully started"
        else
            echo "Failed to start service"
        fi
    fi
    echo
}

# Stop the MATH
stop() {
    echo "Stopping MATH..."
    #Verify if the service is running
    $PGREP -f MATH > /dev/null
    VERIFIER=$?
    if [ $ZERO = $VERIFIER ]
    then
        #Kill the pid of Java with the service name
        kill -9 $($PGREP -f MATH)
        #Sleep time before the service verification
        sleep 10
        #Verify if the service is running
        $PGREP -f MATH  > /dev/null
        VERIFIER=$?
        if [ $ZERO = $VERIFIER ]
        then
            echo "Failed to stop service"
        else
            echo "Service was successfully stopped"
        fi
    else
        echo "The service is already stopped"
    fi
    echo
}

# Verify the status of MATH
status() {
    echo "Checking status of MATH..."
    #Verify if the service is running
    $PGREP -f MATH > /dev/null
    VERIFIER=$?
    if [ $ZERO = $VERIFIER ]
    then
        echo "Service is running"
    else
        echo "Service is stopped"
    fi
    echo
}

# Main logic
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status
        ;;
    restart|reload)
        stop
        start
        ;;
  *)
    echo $"Usage: $0 {start|stop|status|restart|reload}"
    exit 1
esac
exit 0
20