Служба не запускается на 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/jasper
3 ответа
Я не вижу # chkconfig: - 30 60
в вашем сценарии запуска указывается номер заказа в последовательности запуска (30) или выключения (60).
Какие симлинки настраиваются в /etc/rc[0-6].d/
к вашим услугам?
IIRC, когда ничего не определено, используется prio 50. Это может привести к попытке запустить ваш сервис до того, как будут запущены другие зависимости.
Стандартная установка CentOS обычно Defaults requiretty
установить в /etc/sudoers
, Это приведет к sudo -u $user $command
потерпеть неудачу в скрипте инициализации при запуске, так как скрипт не обязательно выполняется в "завершенном" tty.
Полезно, что CentOS предоставляет общий файл функций инициализации (/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
создать оболочку с правильными разрешениями для запуска команды, аккуратно избегая любых проблем с окружением или безопасности 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