我安装了一项服务,用于在启动时启动 jasper 报告服务器。我相信它设置正确。
这是位于 /etc/init.d/jasperserver 中的启动脚本
#!/bin/sh
### BEGIN INIT INFO
# Provides: jasperserver
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start JasperServer at boot time
# Description: Enable service provided by JasperServer.
### END INIT INFO
JASPER_HOME="/opt/jaspersoft/jasperreports-server-5.5"
case "$1" in
start)
if [ -f $JASPER_HOME/ctlscript.sh ]; then
echo "Starting JasperServer"
sudo -u ec2-user $JASPER_HOME/ctlscript.sh start
fi
;;
stop)
if [ -f $JASPER_HOME/ctlscript.sh ]; then
echo "Stopping JasperServer"
sudo -u ec2-user $JASPER_HOME/ctlscript.sh stop
fi
;;
restart)
if [ -f $JASPER_HOME/ctlscript.sh ]; then
echo "Restarting JasperServer"
sudo -u ec2-user $JASPER_HOME/ctlscript.sh restart
fi
;;
status)
if [ -f $JASPER_HOME/ctlscript.sh ]; then
sudo -u ec2-user $JASPER_HOME/ctlscript.sh status
fi
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
另外,我运行命令
sudo chmod +x /etc/init.d/jasperserver
然后我运行了命令
sudo chkconfig --add jasperserver
sudo chkconfig jasperserver on
如果我运行:
chkconfig --list | grep jasper
我懂了:
jasperserver 0:off 1:off 2:on 3:on 4:on 5:on 6:off
我还可以运行:
sudo service jasperserver (start|stop|restart)
成功地
但是当我重新启动时,服务没有运行。我想知道是否有办法获取日志信息或启用日志来解决这个问题。
更多详情
uname -a
Linux jaspersoft.localdomain 3.10.42-52.145.amzn1.x86_64 #1 SMP Tue Jun 10 23:46:43 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
添加以下行之后:
# chkconfig: 2345 70 30
符号链接如下:
[ec2-user@jaspersoft ~]$ ls -laF /etc/rc.d/rc3.d/*jasper*
lrwxrwxrwx 1 root root 22 Aug 6 08:09 /etc/rc.d/rc3.d/S70jasperserver -> ../init.d/jasperserver*
/etc/rc.d/rc[2-5].d/ 也同样如此。碧玉
答案1
我没有# chkconfig: - 30 60
在您的启动脚本中看到一行规定启动序列(30)或关闭序列(60)中的顺序号。
/etc/rc[0-6].d/
为您的服务设置了哪些符号链接?
据我所知,当没有定义时,将使用 prio 50。这可能会导致在启动其他依赖项之前尝试启动您的服务。
答案2
原版 CentOS 安装通常会Defaults requiretty
在 中设置/etc/sudoers
。这将导致sudo -u $user $command
启动时 init 脚本内部失败,因为该脚本不一定在“完整”tty 中运行。
有用的是,CentOS 提供了一个通用的 init 函数文件(/etc/rc.d/init.d/functions
),其中包含该daemon
函数 - 用于使用不同选项(例如,用户、nice、pid 文件等)运行程序的包装器。
尝试按如下方式修改您的脚本:
# Source function library.
. /etc/rc.d/init.d/functions
...
start)
if [ -f $JASPER_HOME/ctlscript.sh ]; then
echo "Starting JasperServer"
daemon --user $JASPER_USER $JASPER_HOME/ctlscript.sh start
fi
;;
这将用于runuser -s /bin/bash $user
创建具有正确权限的 shell 以运行命令,巧妙地避免任何环境干预或安全su
问题sudo
。
答案3
我已经找到了解决方案,我相信问题出在这一行:
sudo -u ec2-user ....
这是新脚本:
#!/bin/sh
# chkconfig: 2345 96 14
#
# Start/Stop of JasperReports Server
#
JASPER_HOME="/opt/jaspersoft/jasperreports-server-5.5"
JASPER_USER=ec2-user
case "$1" in
start)
if [ -f $JASPER_HOME/ctlscript.sh ]; then
echo "Starting JasperServer"
su $JASPER_USER -c "$JASPER_HOME/ctlscript.sh start"
fi
;;
stop)
if [ -f $JASPER_HOME/ctlscript.sh ]; then
echo "Stopping JasperServer"
su $JASPER_USER -c "$JASPER_HOME/ctlscript.sh stop"
fi
;;
restart)
if [ -f $JASPER_HOME/ctlscript.sh ]; then
echo "Restarting JasperServer"
su $JASPER_USER -c "$JASPER_HOME/ctlscript.sh restart"
fi
;;
status)
if [ -f $JASPER_HOME/ctlscript.sh ]; then
su $JASPER_USER -c "$JASPER_HOME/ctlscript.sh status"
fi
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac