服务不是在启动CentOS上启动

我安装了一个服务来启动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,以便运行命令,整齐地避免任何环境干扰或sudosudo安全问题。

我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