Как создать сервис на Ubuntu Upstart

21

У меня есть исполняемая программа на 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 ln -s /etc/init/myprogram.conf /etc/init.d/myprogram

Затем попробуйте запустить и остановить это:

sudo service myprogram start

В соответствии с выскочкой поваренной книги , вы можете создавать pre-start/ post-startи pre-stop/ post-stopкоманды для выполнения.

Кроме того, я прочитал, что вы хотите проверить, запущен ли процесс. Проверьте этот вопрос и, возможно, воспользуйтесь pre-startразделом.

Раэль Гугельмин Кунья
источник
1
Может быть, вам нужно сделать его исполняемым с sudo chmod +x /etc/init.d/myprogram. ВНИМАНИЕ: ваш ответ не работает в Ubuntu 16.04!
juliocesar
2
@juliocesar 16.04 использует systemd, а не Upstart.
Раэль Гугельмин Кунья
start onне является обязательной строфой. Как вы можете прочитать здесь : Такая работа может контролироваться только администратором .
Суббота,
@SuB да, но тогда задание не запустится автоматически, и было ясно, что автору вопроса нужно что-то, действующее как служба, то есть запускаться автоматически.
Раэль Гугельмин Кунья
Да. Я знаю. просто добавил комментарий, чтобы завершить свой ответ.
суббота
0

Вам нужно создать выскочку. http://upstart.ubuntu.com/getting-started.html

Upstart - это (IMHO) катастрофа по сравнению с хорошими сценариями инициализации SysV. Upstart НАМНОГО больше усилий с небольшим потенциалом для дополнительной работы. С учетом вышесказанного, я подозреваю, что там будет несколько выскочка защитников, которые приведут меня к заданию, чтобы я констатировал очевидное ;-)

Эндрю
источник
1
Это просто файл в /etc/init/yourservice.conf со строкой, указывающей, когда начинать, а другой - для команды exec. Fedora тоже использует выскочку. Кроме того, даже Debian меняет свою начальную схему на SystemD, которая в будущем станет схемой Ubuntu.
Раэль Гугельмин Кунья