Я установил Tomcat 7 на Ubuntu 12.04 LTS, которая работает на экземпляре Amzon EC2. Теперь я хочу, чтобы tomcat автоматически перезагружался при перезагрузке системы.
Я прочитал этот блог , в котором предлагается добавить приведенный ниже скрипт в /etc/init.d/tomcat7
:
# Tomcat auto-start
#
# description: Auto-starts tomcat
# processname: tomcat
# pidfile: /var/run/tomcat.pid
case $1 in
start)
sh /usr/share/tomcat7/bin/startup.sh
;;
stop)
sh /usr/share/tomcat7/bin/shutdown.sh
;;
restart)
sh /usr/share/tomcat7/bin/shutdown.sh
sh /usr/share/tomcat7/bin/startup.sh
;;
esac
exit 0
и выполнить следующие команды:
sudo chmod 755 /etc/init.d/tomcat7
sudo ln -s /etc/init.d/tomcat7 /etc/rc1.d/K99tomcat
sudo ln -s /etc/init.d/tomcat7 /etc/rc2.d/S99tomcat
sudo /etc/init.d/tomcat7 restart
Мои вопросы
Создайте init сценарий в/etc/init.d/tomcat7 с содержанием согласно ниже (Ваш сценарий должен работать также, но я думаю, что этот придерживается более тесно стандартов).
Таким образом, Tomcat запустится только после того, как сетевые интерфейсы были настроены.
Содержание сценария Init:
#!/bin/bash
### BEGIN INIT INFO
# Provides: tomcat7
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start/Stop Tomcat server
### END INIT INFO
PATH=/sbin:/bin:/usr/sbin:/usr/bin
start() {
sh /usr/share/tomcat7/bin/startup.sh
}
stop() {
sh /usr/share/tomcat7/bin/shutdown.sh
}
case $1 in
start|stop) $1;;
restart) stop; start;;
*) echo "Run as $0 <start|stop|restart>"; exit 1;;
esac
Измените его полномочия и добавьте корректные символьные ссылки автоматически:
chmod 755 /etc/init.d/tomcat7
update-rc.d tomcat7 defaults
И с этого времени это будет автоматически запущено и закрыто после ввода соответствующего runlevels. Можно также управлять им с service tomcat7 <stop|start|restart>
#!/bin/bash
#
# Author : subz
# Copyright (c) 2k15
#
# Make kill the tomcat process
#
TOMCAT_HOME=/media/subin/works/Applications/apache-tomcat-7.0.57
SHUTDOWN_WAIT=5
tomcat_pid() {
echo `ps aux | grep org.apache.catalina.startup.Bootstrap | grep -v grep | awk '{ print $2 }'`
}
start() {
pid=$(tomcat_pid)
if [ -n "$pid" ]
then
echo "Tomcat is already running (pid: $pid)"
else
# Start tomcat
echo "Starting tomcat"
/bin/sh $TOMCAT_HOME/bin/startup.sh
fi
return 0
}
stop() {
pid=$(tomcat_pid)
if [ -n "$pid" ]
then
echo "Stoping Tomcat"
/bin/sh $TOMCAT_HOME/bin/shutdown.sh
let kwait=$SHUTDOWN_WAIT
count=0;
until [ `ps -p $pid | grep -c $pid` = '0' ] || [ $count -gt $kwait ]
do
echo -n -e "\nwaiting for processes to exit";
sleep 1
let count=$count+1;
done
if [ $count -gt $kwait ]; then
echo -n -e "\nkilling processes which didn't stop after $SHUTDOWN_WAIT seconds"
kill -9 $pid
echo " \nprocess killed manually"
fi
else
echo "Tomcat is not running"
fi
return 0
}
pid=$(tomcat_pid)
if [ -n "$pid" ]
then
echo "Tomcat is running with pid: $pid"
stop
else
echo "Tomcat is not running"
start
fi
exit 0
Не могу это добавить в /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
sleep 10
/usr/share/tomcat7/bin/startup.sh
Digital Ocean предоставляет очень удобное руководство по использованию Tomcat 8.x и Ubuntu 16.04 LTS и сценариев systemd.
https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-8-on-ubuntu-16-04
apache tomcat не поставляет ни один скрипт инициализации вместе с ним.
Установите предварительно упакованную версию, поддерживаемую Ubuntu, из менеджера пакетов Ubuntu, эта версия поставляет свой собственный скрипт инициализации.
Следуйте инструкциям в блоге, на который вы ссылались, чтобы предоставить вам сценарий инициации кикстарта.
Я попробовал принятый ответ, но он не сработал.
В результате удалось удалить службу и снова добавить ее:
sudo update-rc.d -f tomcat7 remove
sudo update-rc.d tomcat7 defaults