У меня есть исполняемая программа на Java, которую я могу запустить, набрав java -jar abc.jarв терминале. Как я могу запустить его как сервис? Я хочу запустить его как сервис, как, набрав service abc start.
У меня есть исполняемая программа на Java, которую я могу запустить, набрав java -jar abc.jarв терминале. Как я могу запустить его как сервис? Я хочу запустить его как сервис, как, набрав service abc start.
Ответы:
Убедитесь, что вы на 14.04. Ubuntu 16.04 (и выше) использует systemd, а не Upstart.
Сценарий Upstart - это файл сценария, расположенный в /etc/init/и заканчивающийся на .conf.
Требуется 2 раздела: один для указания, когда начинать, а другой с командой для выполнения.
Самый простой скрипт для запуска с вашим примером:
# myprogram.conf
start on filesystem
exec /usr/bin/java -jar /path_to/program
Создано как root под /etc/init/myprogram.conf.
Если вашему сценарию требуется более одной командной строки, используйте scriptраздел вместо execстроки:
# myprogram.conf
start on filesystem
script
/usr/bin/java -jar /path_to/program
echo "Another command"
end script
Чтобы включить завершение bash для вашей службы, добавьте символическую ссылку в /etc/init.dпапку:
sudo ln -s /etc/init/myprogram.conf /etc/init.d/myprogram
Затем попробуйте запустить и остановить это:
sudo service myprogram start
В соответствии с выскочкой поваренной книги , вы можете создавать pre-start/ post-startи pre-stop/ post-stopкоманды для выполнения.
Кроме того, я прочитал, что вы хотите проверить, запущен ли процесс. Проверьте этот вопрос и, возможно, воспользуйтесь pre-startразделом.
sudo chmod +x /etc/init.d/myprogram. ВНИМАНИЕ: ваш ответ не работает в Ubuntu 16.04!
Вам нужно создать выскочку. http://upstart.ubuntu.com/getting-started.html
Upstart - это (IMHO) катастрофа по сравнению с хорошими сценариями инициализации SysV. Upstart НАМНОГО больше усилий с небольшим потенциалом для дополнительной работы. С учетом вышесказанного, я подозреваю, что там будет несколько выскочка защитников, которые приведут меня к заданию, чтобы я констатировал очевидное ;-)