У меня есть исполняемая программа на Java, которую я могу запустить, набрав java -jar abc.jarв терминале. Как я могу запустить его как сервис? Я хочу запустить его как сервис, как, набрав service abc start.
Более полный ответ здесь: unix.stackexchange.com/questions/1924/… По сути, в Ubuntu вы можете создать скрипт для /etc/init.d, который может запускать / останавливать / перезапускать вашу службу.
Мистер Эд
Ответы:
41
Убедитесь, что вы на 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 chmod +x /etc/init.d/myprogram. ВНИМАНИЕ: ваш ответ не работает в Ubuntu 16.04!
juliocesar
2
@juliocesar 16.04 использует systemd, а не Upstart.
Раэль Гугельмин Кунья
start onне является обязательной строфой. Как вы можете прочитать здесь : Такая работа может контролироваться только администратором .
Суббота,
@SuB да, но тогда задание не запустится автоматически, и было ясно, что автору вопроса нужно что-то, действующее как служба, то есть запускаться автоматически.
Раэль Гугельмин Кунья
Да. Я знаю. просто добавил комментарий, чтобы завершить свой ответ.
Upstart - это (IMHO) катастрофа по сравнению с хорошими сценариями инициализации SysV. Upstart НАМНОГО больше усилий с небольшим потенциалом для дополнительной работы. С учетом вышесказанного, я подозреваю, что там будет несколько выскочка защитников, которые приведут меня к заданию, чтобы я констатировал очевидное ;-)
Это просто файл в /etc/init/yourservice.conf со строкой, указывающей, когда начинать, а другой - для команды exec. Fedora тоже использует выскочку. Кроме того, даже Debian меняет свою начальную схему на SystemD, которая в будущем станет схемой Ubuntu.
Ответы:
Убедитесь, что вы на 14.04. Ubuntu 16.04 (и выше) использует systemd, а не Upstart.
Сценарий Upstart - это файл сценария, расположенный в
/etc/init/
и заканчивающийся на.conf
.Требуется 2 раздела: один для указания, когда начинать, а другой с командой для выполнения.
Самый простой скрипт для запуска с вашим примером:
Создано как root под
/etc/init/myprogram.conf
.Если вашему сценарию требуется более одной командной строки, используйте
script
раздел вместоexec
строки:Чтобы включить завершение bash для вашей службы, добавьте символическую ссылку в
/etc/init.d
папку:Затем попробуйте запустить и остановить это:
В соответствии с выскочкой поваренной книги , вы можете создавать
pre-start
/post-start
иpre-stop
/post-stop
команды для выполнения.Кроме того, я прочитал, что вы хотите проверить, запущен ли процесс. Проверьте этот вопрос и, возможно, воспользуйтесь
pre-start
разделом.источник
sudo chmod +x /etc/init.d/myprogram
. ВНИМАНИЕ: ваш ответ не работает в Ubuntu 16.04!start on
не является обязательной строфой. Как вы можете прочитать здесь : Такая работа может контролироваться только администратором .Вам нужно создать выскочку. http://upstart.ubuntu.com/getting-started.html
Upstart - это (IMHO) катастрофа по сравнению с хорошими сценариями инициализации SysV. Upstart НАМНОГО больше усилий с небольшим потенциалом для дополнительной работы. С учетом вышесказанного, я подозреваю, что там будет несколько выскочка защитников, которые приведут меня к заданию, чтобы я констатировал очевидное ;-)
источник