Сценарий Unix при запуске в /etc/init.d не работает

Я пытался заставить свое Java-приложение работать как демон в фоновом режиме после запуска. Я следовал инструкциям, приведенным в верхнем ответе здесь и безрезультатно.

Это мой файл /etc/init.d/myapp:

#!/bin/bash
# MyApp
#
# description: bla bla

case $1 in
    start)
        /bin/bash /var/lib/myapp/start.sh
    ;;
    stop)
        /bin/bash /var/lib/myapp/stop.sh
    ;;
    restart)
        /bin/bash /var/lib/myapp/stop.sh
        /bin/bash /var/lib/myapp/start.sh
    ;;
esac
exit 0

что касается /var/lib/myapp/start.sh, то он выглядит так:

#!/bin/bash
java -jar myapp-1.0.0RC.jar &

и нормально работает при запуске из терминала через ssh.

я также выполнил команду update-rc.d myscript defaults и получил только предупреждение о заголовках и LSB

После этого, как только я перезагружаю сервер, приложение не запускается. Любая помощь приветствуется.

Спасибо.


person OsaSoft    schedule 23.07.2014    source источник
comment
Все ли сценарии (скрипт инициализации, start.sh и stop.sh) исполняемые? Что произойдет, если вы запустите /etc/init.d/myapp start вручную?   -  person Andrew Stubbs    schedule 23.07.2014
comment
@AndrewStubbs всем файлам присвоено значение 777 ... запуск myapp start вручную приводит к невозможности доступа к jarfile .... Кажется, это проблема, однако jar находится в той же папке, что и start.sh   -  person OsaSoft    schedule 23.07.2014
comment
@AndrewStubbs ах, вот так ... Теперь понятно, поэтому, хотя я запускаю скрипт, который находится в той же папке, что и файл jar, основной путь остается прежним. Добавление cd /var/lib/myapp в файл /etc/init.d/myapp перед запуском start.sh помогло. Спасибо   -  person OsaSoft    schedule 23.07.2014


Ответы (2)


Когда сценарии bash запускаются, они не запускаются автоматически из того же каталога, в котором они содержатся.

Вам нужно либо обновить свои скрипты, чтобы изменить каталог на тот, в котором хранятся скрипты перед запуском jar:

#!/bin/bash
cd /var/lib/myapp/
java -jar myapp-1.0.0RC.jar &

Или обратитесь к файлу jar с полным путем:

#!/bin/bash
java -jar /var/lib/myapp/myapp-1.0.0RC.jar &
person Andrew Stubbs    schedule 23.07.2014
comment
Это помогло. Видя, что мне нужно приложение Java для доступа к некоторым файлам с относительными путями, изменение каталога с помощью cd лучше всего подходит для моего решения. Спасибо друг - person OsaSoft; 23.07.2014
comment
Хм... видимо, хотя я могу вручную запустить /etc/init.d/myapp start, он все равно не запускается после перезагрузки... - person OsaSoft; 23.07.2014
comment
вам, вероятно, также нужен полный путь к исполняемому файлу java - person Gus; 23.07.2014
comment
@OsaSoft Предположительно, вы выполнили шаг update-rc.d myscript defaults из темы, на которую вы ссылаетесь? Если это так, я думаю, это то, что сказал Гас, измените java на то, где находится ваш двоичный файл Java, который вы можете найти с помощью which java - person Andrew Stubbs; 23.07.2014
comment
@Gus Это действительно решило проблему. Интересно, как в одном случае нужен полный путь к бинарнику, а в другом нет. В любом случае большое спасибо вам обоим - person OsaSoft; 23.07.2014

Проверьте, правильно ли зарегистрирована ваша служба через chkconfig.

$ chkconfig --list

Если вы не видите свою службу в списке на выходе, попробуйте добавить эти строки в свой скрипт.

#!/bin/bash
# chkconfig: 2345 95 20 
# description: bla bla
# processname: myapp

а затем запустить

chkconfig --add myapp

Для получения дополнительной информации вы можете проверить справочную страницу для chkconfig

person riyyaz    schedule 23.07.2014