У меня установлена служба для запуска сервера отчетов 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