Назад | Перейти на главную страницу

скрипт init.d получает ошибку

Прежде всего извините за мой плохой английский

Хорошо, я написал сценарий init.d, и я не знаю его истинность или ложь (я новичок в этом)

#!/bin/sh
. /etc/init.d/someserver

start () {
    echo -n $"Starting someserver.jar: "

    java -jar /home/someserver/someserver.jar &
    echo $! > /home/someserver/someserver.pid
}

stop () {
    echo -n $"Stopping someserver.jar: "

    PID=$(/home/someserver/someserver.pid) 
    kill -9 $PID
}

restart() {
    stop
    start
}

case $1 in
    start)
        start
    ;;
    stop)
        stop
    ;;
    *)

    echo $"Usage: someserver {start|stop}"
    exit 1
esac

после этого я использую эти команды;

$ sudo chmod 755 /etc/init.d/someserver

$ sudo update-rc.d someserver defaults

я получаю эту информацию;

insserv: warning: script 'someserver' missing LSB tags and overrides

/etc/init.d/someserver: 6: .: 3: Too many open files

Я ищу ошибки и информацию, но не понимаю, что это значит и что мне делать?

Примечание: os debian, и я пишу это для mmonit

Вы смотрели другие сценарии инициализации для справки?

Давайте рассмотрим этот раздел за разделом. Сначала дадим имя исполняемой оболочке. Хорошо.

#!/bin/sh

Теперь, пожалуйста, поместите туда теги LSB, как предлагает система инициализации (сообщает системе инициализации зависимости)

### BEGIN INIT INFO
# Provides:          someserver
# Required-Start:    $syslog $network $remote_fs
# Required-Stop:     $syslog $remote_fs
# Should-Start:      $local_fs $named
# Should-Stop:       $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: someserver
# Description:       Some Server
### END INIT INFO

Тогда почему вы взяли сам сценарий инициализации? Вероятно, поэтому возникает упомянутая вами ошибка, так как она называется рекурсивно, что, вероятно, не то, что было задумано.

Обычно вы создаете какой-нибудь скрипт для получения конфигурации или около того:

# source some config (can be omitted)
[ -f /etc/configs/someserver ] && source /etc/configs/someserver

Почему у вас есть знаки доллара в каждом echo заявление? (Хорошо, я думаю, локализация)

(Примечание: посмотрев на другой сценарий инициализации, вы увидите, что debian использует start-stop-daemon для управления демонами, так что вы можете реализовать это. Здесь я этого не делаю.)

start () {
    echo -n "Starting someserver.jar: "

    java -jar /home/someserver/someserver.jar &
    echo $! > /home/someserver/someserver.pid
}

Ты забыл cat в stop().

Также я бы не обязательно kill -9 но только сначала kill. Можно поставить чек, действительно ли он пропадает, а потом kill -9. Опять же, возможно, вам стоит использовать start-stop-daemon.

stop () {
    echo -n "Stopping someserver.jar: "

    PID=$(cat /home/someserver/someserver.pid) 
    kill $PID
}

Обычно вы хотите немного подождать, прежде чем перезапускать

restart() {
    stop
    sleep 10
    start
}

Наконец, вы также должны реализовать restart.

case "$1" in
    start)
      start
      ;;

    stop)
      stop
      ;;

    restart)
      restart
      ;;

    *)
      echo "Usage: someserver {start|stop|restart}"
      exit 1
      ;;
esac

Не все так плохо. Но вы упустили некоторые детали.