У меня есть исполняемая программа на 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 НАМНОГО больше усилий с небольшим потенциалом для дополнительной работы. С учетом вышесказанного, я подозреваю, что там будет несколько выскочка защитников, которые приведут меня к заданию, чтобы я констатировал очевидное ;-)