2

Pure-Java プラグインを使用して Debian パッケージを作成する SBT プロジェクトがあります。プラグインは plugins.sbt で次のように定義されています。

libraryDependencies += "org.vafer" % "jdeb" % "1.5" artifacts (Artifact("jdeb", "jar", "jar"))

SBT コンソールで、次のコマンドを実行します。

debian:packageBin

これにより、Ubuntuマシンにインストールしようとしている.debファイルが生成されますdpkg -i <filename>

パッケージがインストールされます。ライブラリや構成などは /usr/share/ に配置されていますが、これは私が期待していたものです。そのフォルダーには、プログラムを直接起動するスクリプトを含む bin フォルダーも含まれています。ここまでは順調ですね。

ただし、 を使用してプログラムを起動したいのですがservice start <projectname>、動作しません。についても同様です/etc/init.d/<projectname> start。後者のコマンドの出力は次のとおりです。

[ ok ] Starting undagrid-api-server (via systemctl): undagrid-api-server.service.

しかし、で確認すると、プロセスが実行されていませんps。/etc/init.d/<projectname> の内容は次のとおりです。

#! /bin/bash

### BEGIN INIT INFO
# Provides:     <projectname>
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: <projectname>
### END INIT INFO

source /lib/init/vars.sh
source /lib/lsb/init-functions

# adding bashScriptEnvConfigLocation
[[ -f /etc/default/<projectname> ]] && . /etc/default/<projectname>

# $JAVA_OPTS used in $RUN_CMD wrapper
export JAVA_OPTS

PIDFILE=/var/run/<projectname>/running.pid

if [ -z "$DAEMON_USER" ]; then
    DAEMON_USER=<projectname>
fi

if [ -z "$DAEMON_GROUP" ]; then
    DAEMON_GROUP=<projectname>
fi


RUN_CMD="/usr/share/<projectname>/bin/<projectname>"


start_daemon() {
    log_daemon_msg "Starting" "<projectname>"
    [ -d "/var/run/<projectname>" ] || install -d -o "$DAEMON_USER" -g "$DAEMON_GROUP" -m755 "/var/run/<projectname>"
    start-stop-daemon --background --chdir /usr/share/<projectname> --chuid "$DAEMON_USER" --make-pidfile --pidfile "$PIDFILE" --startas "$RUN_CMD" --start -- $RUN_OPTS
    log_end_msg $?
}


stop_daemon() {
    log_daemon_msg "Stopping" "<projectname>"
    start-stop-daemon --stop --quiet --oknodo --pidfile "$PIDFILE" --retry=TERM/60/KILL/30
    log_end_msg $?
    rm -f "$PIDFILE"
}

case "$1" in

  start)
    start_daemon
    exit $?
          ;;
  stop)
    stop_daemon
    exit $?
          ;;
  restart|force-reload)
    stop_daemon
    start_daemon
    exit $?
    ;;
  status)
    status_of_proc -p "$PIDFILE" "$RUN_CMD" <projectname> && exit 0 || exit $?
    ;;
  *)
    log_daemon_msg "Usage: /etc/init.d/<projectname> {start|stop|restart|status}"
    ;;
esac
exit 0

簡単なデバッグを行ったところ、コマンド ライン引数が「start」の場合、スクリプトが 2 番目のソース ステートメントを通過しないことがわかりました。source /lib/lsb/init-functions

Systemctl から次の出力が得られます。

<projectname>.service loaded active exited LSB: <projectname>

を使用してスクリプトも実行しましたbash -xが、読み方がわからないかなりの出力が生成されます。

ここで何が起こっているか知っている人はいますか?パッケージャーを使用してパッケージとしてインストールすることの全体的なポイントは、これらのような頭痛を避けることです...

4

0 に答える 0