Por fim, consigo trabalhar!
Se alguém está interessado na resposta. O problema é que o Glassfish não criou um arquivo PID sozinho. Portanto, há uma solução alternativa onde você inicia o programa em segundo plano (com &) e exibe seu PID.
Para entender, olhei este post:
Resposta de Patrick
resposta de l0b0
resposta do kojiro
Stack * (askUbuntu) -community é realmente uma ótima comunidade! :)
E aqui está o script completo:
#!/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 by Bernhard Sumser.
#
### END INIT INFO
# Using the LSB functions to perform the operations
# NOT needed because no LSB functions used
#. /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 0
do_start()
{
$DAEMON start-domain &
# Wait for child to exit before continuing
wait
# Make file with last background PID
echo $! > $PIDFILE
# Didn't work because the programm prints from the background. Without moving to the bg no $! can be outputed to file
#(($DAEMON start-domain) & echo $! > $PIDFILE &)
}
do_stop()
{
$DAEMON stop-domain
if [ -e $PIDFILE ]; then
rm -f $PIDFILE
fi
}
check_root()
{
if [ "$(id -u)" != "0" ]; then
echo "You must be root to start, stop and restart $NAME."
exit 4
fi
}
check_process()
{
# Check if the process is already running. Ignore grep line.
result='ps aux | grep /opt/glassfish/modules/glassfish.jar | grep -v grep | wc -l'
}
case $1 in
start)
check_root
check_process
if [ "$result" = "1" ]; then
echo "$NAME is already running"
else
# Check if PID file exists and delete it
if [ -e $PIDFILE ]; then
rm -f $PIDFILE
else
do_start
fi
fi
;;
stop)
check_root
if [ -e $PIDFILE ]; then
do_stop
else
echo "$NAME is not running"
fi
;;
restart)
check_root
echo "Restarting $NAME..."
check_process
if [ "$result" = "1" ]; then
do_stop
echo "Starting $NAME..."
do_start
fi
;;
status)
if [ -e $PIDFILE ]; then
echo "$NAME is running. PID $(cat $PIDFILE)"
else
echo "$NAME is not running"
fi
;;
*)
# Show help
echo "Usage: $SCRIPTNAME {start|status|stop|restart}" >&2
exit 3
;;
esac
Como está localizado em /etc/init.d/, não tenho certeza se o script ainda precisa da seção INIT INFO.
Agora é possível usá-lo como um serviço normal como este:
sudo service glassfish start
Em seguida, adicione-o à inicialização do rc e ele será iniciado após a reinicialização.
sudo update-rc.d glassfish defaults