Прежде всего извините за мой плохой английский
Хорошо, я написал сценарий 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
Не все так плохо. Но вы упустили некоторые детали.