Извинявам се за това и благодаря за преместването на темата в правилната категория.
Имам един init script в /etc/init.d/javapps.sh който ще се стартира при старт на сървъра. Идеята вътре в него да извиквам старт скриптове на няколко liferay инсталации (томкат), чиито инит скриптове се намират в /var/www/javapps/init.d/enabled директорията.
Главният инит скрипт има следния код:
#!/bin/bash -e
### BEGIN INIT INFO
# Provides: javapps
# Required-Start: $syslog $time $remote_fs
# Required-Stop: $syslog $time $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start Java Applications
# Description: Debian init script for starting Java Applications
### END INIT INFO
DESC="Starting Java Applications"
# Name of the user to run as
USER=javapps
# Location of applications init directory
INIT_DIR=/var/www/javapps/init.d/enabled
RETVAL=0
. /lib/lsb/init-functions
if [ ! -e "$INIT_DIR" ]; then
log_daemon_msg "Unable to locate init scripts directory. Please set INIT_DIR variable."
exit 1
fi
start() {
echo "Starting $DESC: "
su -s /bin/bash -c "for INIT in $(ls $INIT_DIR); do $INIT_DIR/$INIT status; done" $USER >/dev/null
}
stop() {
echo "Shutting down $DESC:"
su -s /bin/bash -c "for INIT in $(ls $INIT_DIR); do $INIT_DIR/$INIT stop; done" $USER >/dev/null
}
status() {
for INIT in $(ls $INIT_DIR); do
$INIT_DIR/$INIT status;
done
}
case "$1" in
# Start command
start)
start
log_end_msg $?
;;
# Stop command
stop)
stop
log_end_msg $?
;;
# Restart command
restart)
stop
sleep 5
start
;;
status)
status
;;
*)
echo "Usage: /etc/init.d/$NAME {start|restart|stop|status}"
exit 1
;;
esac
exit 0
Това е кодът на един от инит скриптовете (всички останали са много подобни на този), който се извикват от този /etc/init.d/javapps.sh във for цикъла:
#!/bin/bash -e
NAME=cbox-dev
DESC="Liferay CBOX Dev Build"
PIDFILE=/run/javapps/$NAME.pid
# Location of Java JDK
export JAVA_HOME=/var/www/javapps/tools/java7/jdk7
# Location of application's bin directory
CATALINA_HOME=/var/www/javapps/dev/liferay/centricbox/liferay-portal-6.1.1-ce-ga2/tomcat-7.0.27
CATALINA_START=bin/startup.sh
CATALINA_STOP=bin/shutdown.sh
PIDOF=/bin/pidof
RM=/bin/rm
CAT=/bin/cat
RETVAL=0
. /lib/lsb/init-functions
start() {
log_daemon_msg "Starting $DESC ($NAME): "
if [ ! -e "$CATALINA_HOME/$CATALINA_START" ]; then
log_daemon_msg "Unable to locate starting script. Please set CATALINA_START variable."
return 1
fi
if [ -f $PIDFILE ]; then
PID=$($CAT $PIDFILE)
RETVAL=$($PIDOF $PID)
if [ $RETVAL -eq 1 ]; then
log_daemon_msg "$DESC is already running..."
return 1
else
$RM -f $PIDFILE
fi
fi
$CATALINA_HOME/$CATALINA_START > /dev/null
RETVAL=$?
[ $RETVAL -eq 0 ] && echo $! > $PIDFILE
return $RETVAL
}
stop() {
log_daemon_msg "Shutting down $DESC ($NAME): "
if [ ! -e "$CATALINA_HOME/$CATALINA_STOP" ]; then
log_daemon_msg "Unable to locate stoping script. Please set CATALINA_STOP variable."
return 1
fi
if [ ! -f $PIDFILE ]; then
echo "Unable to find PID file, $DESC is not running..."
return 1
else
$CATALINA_HOME/$CATALINA_STOP > /dev/null
RETVAL=$?
[ $RETVAL -eq 0 ] && $RM $PIDFILE
return $RETVAL
fi
}
status() {
if [ ! -f $PIDFILE ]; then
log_daemon_msg "Unable to find PID file, $DESC is not running..."
return 1
else
log_daemon_msg "$DESC is running..."
return 0
fi
}
case "$1" in
# Start command
start)
start
log_end_msg $?
;;
# Stop command
stop)
stop
log_end_msg $?
;;
# Restart command
restart)
stop
sleep 5
start
;;
status)
status
;;
*)
echo "Usage: /etc/init.d/$NAME {start|restart|stop|status}"
exit 1
;;
esac
exit 0
В главният скрипт, който е предназначен да се пуска при старт на сървъра, има FOR цикъл, но спира веднага след първата итерация, без значение колко скрипта има в директорията, където се намира.