Linux実行可能ファイルをサービスとして作成しようとしています
以下のようにプログラムを実行します
Java -jar mytestprogram.jar
連続して実行され、RESTリクエストを処理するプロセスを作成します。しかし、できるサービスとして実行したい
service mytestprogram start
service mytestprogram stop
service mytestprogram status
chkconfig mytestprogram on
など。それを行う最も簡単な方法は何ですか?
それはシステム管理者に依存します
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を少し知っていれば簡単です;)
サンプルのシェルスクリプトを次に示します(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