O serviço não está iniciando no Centos na inicialização

6

Eu tenho um serviço instalado para iniciar o servidor de relatórios do jasper na inicialização. Eu acredito que está configurado corretamente.

aqui está o script de inicialização colocado em /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

Além disso, eu corro o comando

sudo chmod +x /etc/init.d/jasperserver

Eu então executei os comandos

sudo chkconfig --add jasperserver
sudo chkconfig jasperserver on

Se eu correr:

chkconfig --list  | grep jasper

Eu vejo:

jasperserver    0:off   1:off   2:on    3:on    4:on    5:on    6:off

Eu também posso correr:

sudo service jasperserver (start|stop|restart) 

com sucesso

No entanto, quando eu emito uma reinicialização, o serviço não está em execução. Gostaria de saber se há uma maneira de obter informações de registro ou ativar o registro para poder resolver isso.

Mais detalhes

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

Além disso, depois de adicionar a linha:

# chkconfig: 2345 70 30

os links simbólicos são os seguintes:

[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*

e da mesma forma para /etc/rc.d/rc[2-5].d/jasper

    
por silverdagger 06.08.2014 / 09:45

3 respostas

4

Não vejo uma linha # chkconfig: - 30 60 no script de inicialização exigindo o número do pedido na sequência de inicialização (30) ou na sequência de desligamento (60).

Quais links simbólicos estão sendo configurados em /etc/rc[0-6].d/ para o seu serviço?

IIRC quando nenhum é definido O prio 50 é usado. Isso pode resultar em tentar iniciar seu serviço antes que outras dependências tenham sido iniciadas.

    
por 06.08.2014 / 10:03
3

Uma instalação padrão do CentOS normalmente terá Defaults requiretty definido em /etc/sudoers . Isso fará com que sudo -u $user $command falhe em um script de inicialização na inicialização, pois o script não está necessariamente sendo executado em um tty "completo".

Convenientemente, o CentOS fornece um arquivo de funções init comum ( /etc/rc.d/init.d/functions ) que contém a função daemon - um wrapper para executar programas com diferentes opções (por exemplo, usuário, arquivos nice, pid, etc.).

Tente modificar seu script da seguinte forma:

# 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
  ;;

Isso usará runuser -s /bin/bash $user para criar um shell com as permissões corretas para executar o comando, evitando qualquer problema de segurança ou interferência de ambiente com su ou sudo .

    
por 06.08.2014 / 18:04
0

Encontrei uma solução e acredito que a questão é sobre essa linha:

sudo -u ec2-user ....

Este é o novo script:

#!/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
    
por 06.08.2014 / 10:54