Назад | Перейти на главную страницу

Служба не запускается на 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/Джаспер

Я не вижу # chkconfig: - 30 60 в вашем сценарии запуска, указав порядковый номер в последовательности запуска (30) или выключения (60).

Какие символические ссылки устанавливаются в /etc/rc[0-6].d/ для вашей службы?

IIRC, когда ничего не определено, используется prio 50. Это может привести к попытке запустить вашу службу до того, как будут запущены другие зависимости.

Стандартная установка CentOS обычно имеет Defaults requiretty установить в /etc/sudoers. Это вызовет sudo -u $user $command сбой внутри сценария инициализации при запуске, поскольку сценарий не обязательно работает на «полном» терминале.

Полезно, что CentOS предоставляет общий файл функций инициализации (/etc/rc.d/init.d/functions), который содержит daemon function - оболочка для запуска программ с разными параметрами (например, user, 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 чтобы создать оболочку с правильными разрешениями для запуска команды, аккуратно избегая любого вмешательства в среду или проблем безопасности с su или sudo.

Я нашел решение и считаю, что проблема связана с этой строкой:

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