我有一个使用纯 Java 插件创建 Debian 包的 SBT 项目。该插件在 plugins.sbt 中定义如下:
libraryDependencies += "org.vafer" % "jdeb" % "1.5" artifacts (Artifact("jdeb", "jar", "jar"))
在 SBT 控制台中,我执行以下命令:
debian:packageBin
这会生成一个 .deb 文件,我尝试使用它在 Ubuntu 机器上安装该文件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”,则脚本永远不会超过第二个源语句:source /lib/lsb/init-functions
Systemctl 给我以下输出:
<projectname>.service loaded active exited LSB: <projectname>
我也使用过运行脚本,bash -x
但这会产生相当多的输出,我真的不知道如何阅读。
有人知道这里发生了什么吗?使用打包器并将其安装为包的全部目的是避免像这样的头痛......