我安装了一个服务来启动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)
顺利
但是,当我发出重新启动,该服务没有运行。 我想知道是否有一种方法可以获取日志信息或启用日志logging来解决这个问题。
更多详情
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/ jasper一样
我在启动脚本中看不到启动顺序(30)或closures(60)顺序中的# chkconfig: - 30 60行。
在/etc/rc[0-6].d/为你的服务设置了哪些符号链接?
IIRC当没有定义prio 50被使用。 这可能会导致尝试启动您的服务之前,其他依赖项已经启动。
股票CentOS安装通常会在/etc/sudoers设置Defaults requiretty 。 这将导致sudo -u $user $command在启动脚本内部失败,因为脚本不一定在“完整的”tty中运行。
有用的是,CentOS提供了一个通用的init函数文件( /etc/rc.d/init.d/functions ),它包含daemon函数 – 一个用于运行具有不同选项(例如用户,nice,pid文件等)的daemon的包装器。 。
尝试修改您的脚本,如下所示:
# 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创build一个具有正确权限的shell,以便运行命令,整齐地避免任何环境干扰或sudo或sudo安全问题。
我find了一个解决scheme,我相信这个问题是关于这一行:
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