Каталог статей
Меню сайта


Форма входа


Категории раздела
Oracle DB [72]
Materials concerning Oracle database
Howto [24]
Все про Oracle [65]
Разработка на SQL и PL/SQL для Oracle, анализ работы базы
Построение Web-интерфейса: все что касается JSF, ADF и AJAX [9]
Разное [19]
Solaris [46]
Что касается администрирования Solaris
Linux [29]
Заметки по настройке Linux
AIX [1]
AIX, настройка Oracle на AIX
Java [15]
Cryptography [10]
Windows [1]
Java [35]
PostgreSQL [2]


Поиск


Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz


  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0


    Приветствую Вас, Гость · RSS 08.05.2024, 11:39
    Главная » Статьи » Java

    How to use JVM as a daemon process
    http://shrubbery.mynetgear.net/c/display/W/Java+Daemon+Startup+Script

    See also:

    Here is the CentOS/RedHat/Ubuntu version of the SUSE script:

    #!/bin/bash
    #
    # chkconfig: 345 99 05
    # description: Java deamon script
    #
    # A non-SUSE Linux start/stop script for Java daemons.
    #
    # Derived from -
    # Home page: http://www.source-code.biz
    # License:   GNU/LGPL (http://www.gnu.org/licenses/lgpl.html)
    # Copyright 2006 Christian d'Heureuse, Inventec Informatik AG, Switzerland.
    #
    # History:
    # 2010-09-21 Josh Davis: Changed 'sudo' to 'su', fix some typos, removed unused variables
    # 2009-03-04 Josh Davis: Ubuntu/Redhat version.
    # 2006-06-27 Christian d'Heureuse: Script created.
    # 2006-07-02 chdh: Minor improvements.
    # 2006-07-10 chdh: Changes for SUSE 10.0.
     
     
    # Set this to your Java installation
    JAVA_HOME=/usr/java/latest
     
    serviceNameLo="myservice"                                  # service name with the first letter in lowercase
    serviceName="MyService"                                    # service name
    serviceUser="appuser"                                      # OS user name for the service
    serviceGroup="appgroup"                                    # OS group name for the service
    applDir="/var/lib/$serviceNameLo"                          # home directory of the service application
    serviceUserHome="/home/$serviceUser"                       # home directory of the service user
    serviceLogFile="/var/log/$serviceNameLo.log"               # log file for StdOut/StdErr
    maxShutdownTime=15                                         # maximum number of seconds to wait for the daemon to terminate normally
    pidFile="/var/run/$serviceNameLo.pid"                      # name of PID file (PID = process ID number)
    javaCommand="java"                                         # name of the Java launcher without the path
    javaExe="$JAVA_HOME/bin/$javaCommand"                      # file name of the Java application launcher executable
    javaArgs="-jar $applDir/myservice.jar"                     # arguments for Java launcher
    javaCommandLine="$javaExe $javaArgs"                       # command line to start the Java service application
    javaCommandLineKeyword="myservice.jar"                     # a keyword that occurs on the commandline, used to detect an already running service process and to distinguish it from others
     
    # Makes the file $1 writable by the group $serviceGroup.
    function makeFileWritable {
       local filename="$1"
       touch $filename || return 1
       chgrp $serviceGroup $filename || return 1
       chmod g+w $filename || return 1
       return 0; }
     
    # Returns 0 if the process with PID $1 is running.
    function checkProcessIsRunning {
       local pid="$1"
       if [ -z "$pid" -o "$pid" == " " ]; then return 1; fi
       if [ ! -e /proc/$pid ]; then return 1; fi
       return 0; }
     
    # Returns 0 if the process with PID $1 is our Java service process.
    function checkProcessIsOurService {
       local pid="$1"
       if [ "$(ps -p $pid --no-headers -o comm)" != "$javaCommand" ]; then return 1; fi
       grep -q --binary -F "$javaCommandLineKeyword" /proc/$pid/cmdline
       if [ $? -ne 0 ]; then return 1; fi
       return 0; }
     
    # Returns 0 when the service is running and sets the variable $pid to the PID.
    function getServicePID {
       if [ ! -f $pidFile ]; then return 1; fi
       pid="$(<$pidFile)"
       checkProcessIsRunning $pid || return 1
       checkProcessIsOurService $pid || return 1
       return 0; }
     
    function startServiceProcess {
       cd $applDir || return 1
       rm -f $pidFile
       makeFileWritable $pidFile || return 1
       makeFileWritable $serviceLogFile || return 1
       cmd="nohup $javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile"
       su -m $serviceUser -s $SHELL -c "$cmd" || return 1
       sleep 0.1
       pid="$(<$pidFile)"
       if checkProcessIsRunning $pid; then :; else
          echo -ne "\n$serviceName start failed, see logfile."
          return 1
       fi
       return 0; }
     
    function stopServiceProcess {
       kill $pid || return 1
       for ((i=0; i<maxShutdownTime*10; i++)); do
          checkProcessIsRunning $pid
          if [ $? -ne 0 ]; then
             rm -f $pidFile
             return 0
             fi
          sleep 0.1
          done
       echo -e "\n$serviceName did not terminate within $maxShutdownTime seconds, sending SIGKILL..."
       kill -s KILL $pid || return 1
       local killWaitTime=15
       for ((i=0; i<killWaitTime*10; i++)); do
          checkProcessIsRunning $pid
          if [ $? -ne 0 ]; then
             rm -f $pidFile
             return 0
             fi
          sleep 0.1
          done
       echo "Error: $serviceName could not be stopped within $maxShutdownTime+$killWaitTime seconds!"
       return 1; }
     
    function startService {
       getServicePID
       if [ $? -eq 0 ]; then echo -n "$serviceName is already running"; RETVAL=0; return 0; fi
       echo -n "Starting $serviceName   "
       startServiceProcess
       if [ $? -ne 0 ]; then RETVAL=1; echo "failed"; return 1; fi
       echo "started PID=$pid"
       RETVAL=0
       return 0; }
     
    function stopService {
       getServicePID
       if [ $? -ne 0 ]; then echo -n "$serviceName is not running"; RETVAL=0; echo ""; return 0; fi
       echo -n "Stopping $serviceName   "
       stopServiceProcess
       if [ $? -ne 0 ]; then RETVAL=1; echo "failed"; return 1; fi
       echo "stopped PID=$pid"
       RETVAL=0
       return 0; }
     
    function checkServiceStatus {
       echo -n "Checking for $serviceName:   "
       if getServicePID; then
        echo "running PID=$pid"
        RETVAL=0
       else
        echo "stopped"
        RETVAL=3
       fi
       return 0; }
     
    function main {
       RETVAL=0
       case "$1" in
          start)                                               # starts the Java program as a Linux service
             startService
             ;;
          stop)                                                # stops the Java program service
             stopService
             ;;
          restart)                                             # stops and restarts the service
             stopService && startService
             ;;
          status)                                              # displays the service status
             checkServiceStatus
             ;;
          *)
             echo "Usage: $0 {start|stop|restart|status}"
             exit 1
             ;;
          esac
       exit $RETVAL
    }
     
    main $1

    Категория: Java | Добавил: basil (31.10.2012)
    Просмотров: 485 | Комментарии: 3 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Имя *:
    Email *:
    Код *:
    Бесплатный конструктор сайтов - uCoz