вторник, 15 апреля 2014 г.

Запуск jar файла как демона на примере H@H


Подготавливаем систему.
# apt-get update
# apt-get upgrade
Работаем на Debian Wheezy.
# cat /etc/debian_version
7.4
Устанавливаем OpenJDK Java runtime.
# apt-get install --no-install-recommends openjdk-7-jre
Создаём пользователя для системы, от его имени скачиваем и разворачиваем архив программы.
# useradd --create-home --shell /bin/bash hath
# passwd hath
# su - hath
$ mkdir hentai && cd hentai
$ wget http://hentaiathome.net/get/HentaiAtHome_1.2.0.zip
$ unzip HentaiAtHome_1.2.0.zip
$ ls
autostartgui.bat HentaiAtHome_1.2.0.zip HentaiAtHomeGUI.jar HentaiAtHome.jar sqlite-jdbc-3.7.2.jar

Первый старт необходимо выполнить в ручном режиме для ввода Client ID и Client Key.
$ java -jar HentaiAtHome.jar
2014-04-15T16:17:30Z [info] Started logging to data/log_out
2014-04-15T16:17:30Z [info] Started logging to data/log_err
2014-04-15T16:17:30Z [info] Hentai@Home 1.2.0 starting up
2014-04-15T16:17:30Z [info]
2014-04-15T16:17:30Z [info] Copyright (c) 2008-2012, E-Hentai.org - all rights reserved.
2014-04-15T16:17:30Z [info] This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL v3 license.
2014-04-15T16:17:30Z [info]
2014-04-15T16:17:30Z [info] Before you can use this client, you will have to register it at http://hentaiathome.net/
2014-04-15T16:17:30Z [info] IMPORTANT: YOU NEED A SEPARATE IDENT FOR EACH CLIENT YOU WANT TO RUN.
2014-04-15T16:17:30Z [info] DO NOT ENTER AN IDENT THAT WAS ASSIGNED FOR A DIFFERENT CLIENT.
2014-04-15T16:17:30Z [info] After registering, enter your ID and Key below to start your client.
2014-04-15T16:17:30Z [info] (You will only have to do this once.)
Enter Client ID:
Enter Client Key:
...

На странице "Hentai@Home Clients" ждём обновление статуса на Online, после чего прерываем выполнение программы по CTRL+C.

Проверяем, что в каталоге появились новые файлы программы.
~/hentai$ ls
autostartgui.bat cache data downloaded hathdl HentaiAtHome_1.2.0.zip HentaiAtHomeGUI.jar HentaiAtHome.jar sqlite-jdbc-3.7.2.jar tmp
Завершаем сеанс пользователя hath
~/hentai$ exit
Создаём скрипт запуска программы как демона
# nano /etc/init.d/hentaiathome
Ниже приведён тест скрипта:
#!/bin/sh
### BEGIN INIT INFO
# Provides:          hentaiathome
# 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
# X-Interactive:     true
# Short-Description: Start/stop hentaiathome client
### END INIT INFO

NAME=hentaiathome
DAEMON=/usr/bin/java
USER=hath
DIR="/home/hath/hentai"
STOP_TIMEOUT=60
OPTIONS="-jar HentaiAtHome.jar "

export PATH="${PATH:+$PATH:}/sbin"

#[ -x $DAEMON ] || exit 0
. /lib/lsb/init-functions

start_daemon () {
        start-stop-daemon --start \
        --chuid $USER \
    --chdir $DIR \
    --background \
        --exec $DAEMON -- $OPTIONS || log_end_msg $?
        log_end_msg 0
}

case "$1" in
    start)
        log_daemon_msg "Starting hentaiathome client"
        start_daemon
        ;;
    stop)
        log_daemon_msg "Stopping hentaiathome client"
        start-stop-daemon --stop --quiet \
        --chdir $DIR \
            --exec $DAEMON --retry $STOP_TIMEOUT \
            --oknodo || log_end_msg $?
        log_end_msg 0
        ;;
    reload)
        log_daemon_msg "Reloading hentaiathome client"
        start-stop-daemon --stop --quiet \
        --chdir $DIR \
            --exec $DAEMON \
            --oknodo --signal 1 || log_end_msg $?
        log_end_msg 0
        ;;
    restart|force-reload)
        log_daemon_msg "Restarting hentaiathome client"
        start-stop-daemon --stop --quiet \
        --chdir $DIR \
            --exec $DAEMON --retry $STOP_TIMEOUT \
            --oknodo || log_end_msg $?
        start_daemon
        ;;
    status)
        status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
        ;;
    *)
        log_action_msg "Usage: /etc/init.d/$NAME {start|stop|reload|force-reload|restart|status}" || true
        exit 2
        ;;
esac

exit 0

Как вариант можно загрузить копию этого файла, выложенную на pastebin
# wget http://pastebin.com/download.php?i=1AWYwni7 -O- | tr -d '\r' >/etc/init.d/hentaiathome

При использовании команды без tr -d '\r'
# wget -O /etc/init.d/hentaiathome http://pastebin.com/download.php?i=1AWYwni7
Возможно появление ошибки вида:
# /etc/init.d/hentaiathome
-bash: /etc/init.d/hentaiathome: /bin/sh^M: bad interpreter: No such file or directory
Для её коррекции необходимо избавиться от неверных символов "возврата каретки", выполняем:
# sed -i 's/\r//' /etc/init.d/hentaiathome

Устанавливаем на файл права запуска, настраиваем запуск демона при загрузке операционной системы.
# chmod +x /etc/init.d/hentaiathome
# update-rc.d hentaiathome defaults
# service hentaiathome
[info] Usage: /etc/init.d/hentaiathome {start|stop|reload|force-reload|restart|status}.
# service hentaiathome start

Фишечки. Логи работы программы можно посмотреть здесь:
# tail -f /home/hath/hentai/data/log_out

Комментариев нет:

Отправить комментарий