Я пытаюсь создать скрипт службы init.d для программного обеспечения Glassfish. Но мне кажется, что мои рекомендации в инструкциях LSB init.d не самые лучшие.
Это комманды, которые должен выполнить скрипт:
/opt/glassfish/bin/asadmin start-domain
/opt/glassfish/bin/asadmin stop-domain
/opt/glassfish/bin/asadmin restart-domain
Мой сценарий выглядит так, но это не сработало. Это моя первая попытка создать скрипт init.d. Пожалуйста, скажите мне, когда я что-то не так.
Примечание. Посмотрите мой обновленный скрипт ниже EDIT:
#!/bin/sh
#
### BEGIN INIT INFO
#
# Provides: glassfish
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Glassfish scipt (Non official)
# Description: Start Glassfish domain as service.
# Non official startup script.
#
### END INIT INFO
BASE=/opt/glassfish/bin
DEAMON=${BASE}/asadmin
USERID=root
NAME=glassfish
DESC="Glassfish domain service"
# PID file for the deamon
PIDFILE=/var/run/glassfish.pid
SCRIPTNAME=/etc/init.d/$NAME
# Exit if the package is not installed
[ -x "$DEAMON" ] || exit 0
# Using LSB functions to perform the operations
. /lib/lsb/init-functions
do_start()
{
start-stop-deamon --start --quiet --pidfile $PIDFILE --exec $DEAMON start-domain -- $NAME_OPTIONS
}
do_stop()
{
start-stop-deamon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --exec $DEAMON stop-domain
}
case $1 in
start)
if init_is_upstart; then
exit 1
fi
log_deamon_msg "Starting $DESC"
do_start
case "$?" in
0) sendsigs_omit
log_end_msg 0 ;;
1) log_progress_msg "already started"
log_end_msg 0 ;;
*) log_end_msg 1 ;;
esac
;;
stop)
if init_is_upstart; then
exit 0
fi
log_deamon_msg "Stopping $DESC"
do_stop
case "$?" in
0) log_end_msg 0 ;;
1) log_progress_msg "already stopped"
log_end_msg 0 ;;
*) log_emd_msg 1 ;;
esac
;;
restart|force-reload)
if init_is_upstart; then
exit 1
fi
$0 stop
$0 start
;;
status)
status_of_proc -p $PIDFILE $DEAMON && exit 0 || exit $?
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|status}" >&2
exit 3
;;
esac
:
Когда я делаю «/ bin / bash -x ./glassfish status 'это вывод:
+ case "$FANCYTTY" in
+ true
++ /usr/bin/tput setaf 1
+ RED=''
++ /usr/bin/tput op
+ NORMAL=''
+ echo ' * is not running'
* is not running
+ return 3
+ exit 3
Но не имеет значения, начинаю ли я или останавливаюсь. Результат всегда один и тот же. Сценарий не запускает сервер домена Glassfish.
EDIT:
Я сменил сценарий на это:
#!/bin/sh
### BEGIN INIT INFO
#
# Provides: glassfish
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Glassfish scipt (Non official)
# Description: Start Glassfish domain as service.
# Non official startup script
#
### END INIT INFO
# Using the LSB functions to perform the operations
. /lib/lsb/init-functions
BASE=/opt/glassfish/bin
NAME=glassfish
DAEMON=${BASE}/asadmin
SCRIPTNAME=/etc/init.d/$NAME
#PID file for the daemon
PIDFILE=/var/run/glassfish.pid
#If the daemon is not there, then exit
[ -x "$DAEMON" ] || exit 5
do_start()
{
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON start-domain
}
do_stop()
{
start-stop-daemon --stop --quiet --pidfile $PIDFILE
}
case $1 in
start)
#Check PID file
if [ -e $PIDFILE ]; then
status_of_proc -p $PIDFILE $DAEMON "$NAME process" && status="0" || status="$?"
# IF SUCCESS dont start again
if [ $status = "0" ]; then
exit
fi
fi
#Start the daemon
log_daemon_msg "Starting the process" "$NAME"
if do_start; then
log_end_msg 0
else
log_end_msg 1
fi
;;
stop)
# Stop the daemon
if [ -e $PIDFILE ]; then
status_of_proc -p $PIDFILE $DAEMON "Stopping the $NAME process" && status="0" || status="$?"
if [ "$status" = 0]; then
do_stop
fi
else
log_daemon_msg "$NAME process is not running"
log_end_msg 0
fi
;;
restart)
# Restart the daemon
$0 stop && sleep 2 && $0 start
;;
status)
# Check status
if [ -e $PIDFILE ]; then
status_of_proc -p $PIDFILE $DAEMON "$NAME process" && exit 0 || exit $?
else
log_daemon_msg "$NAME Process is not running"
log_end_msg 0
fi
;;
*)
# Show help
echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
exit 3
;;
esac
После изменения выход: [!d8 ]
* Starting the process glassfish Waiting for domain1 to start .........
Successfully started the domain : domain1
domain Location: /opt/glassfish/domains/domain1
Log File: /opt/glassfish/domains/domain1/logs/server.log
Admin Port: 4848
Command start-domain executed successfully.
Теперь он может начать процесс. Затем при остановке службы появляется следующая проблема:
* glassfish process is not running
Но процесс запущен, и скрипт даже не пытается и просто прерывается. В файле /var/run.[!d10 нет файла PID для стекловолокна