Centos 启动时服务未启动

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) 

成功地

但是当我重新启动时,服务没有运行。我想知道是否有办法获取日志信息或启用日志来解决这个问题。


更多详情

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

相关内容