Не удалось запустить <myapp> .service: Unit <myapp> .service не найден


13

Я создал супер базовый скрипт init.d для моего бота python:

#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....

# Source function library.
. /etc/init.d/functions

start() {
    echo "starting torbot"
    python /home/ctote/dev/slackbots/torbot/torbot.py
    # example: daemon program_name &
}

stop() {
    # code to stop app comes here
    # example: killproc program_name
}

case "$1" in
    start)
       start
       ;;
    stop)
       stop
       ;;
    restart)
       stop
       start
       ;;
    status)
       # code to check status of app comes here
       # example: status program_name
       ;;
    *)
       echo "Usage: $0 {start|stop|status|restart}"
esac

И установили, torbot.pyчтобы быть +xи #!/usr/local/bin/pythonна вершине. Когда я пытаюсь запустить его, я получаю:

:/var/lock/subsys$ sudo service torbot start Failed to start torbot.service: Unit torbot.service not found.

Я что-то пропустил?

Ответы:


4

Если вы используете Ubuntu 16.04 или новее, вы можете просмотреть документацию по systemd о создании служебных файлов.

Сценарий предназначен для старой системы инициализации и управляется устаревшим уровнем совместимости.


2

Для меня я использую Ubuntu 16.04.

Сначала измените функцию инициализации

. /etc/init.d/functions

в

. /lib/lsb/init-functions

Затем в shell создайте символические ссылки из / etc / rc * на мой скрипт:

sudo update-rc.d <myapp> defaults 95

Что значит 95 здесь?
Герман

@ Герман, это приоритет
турсон

1

Хорошо, я попробовал несколько шагов в этом ответе stackoverflow ( Запуск сценария upstart 17.04? ), И они сработали. Моя env выглядит следующим образом

  1. Убунту в 17.10
  2. У меня есть приложение Python на сервере Gunicorn 19.x, мне нужно запустить это приложение в качестве службы.

Во-первых, вам нужно написать файл foo.service.

[Unit] 
Description=FooServer 

[Service] 
Restart=on-failure
WorkingDirectory=/path/to/your/working/directory/where the foo lives
ExecStart=/what/process/will call foo eg: in my case I used gunicorn app:app
ExecReload=/bin/kill -HUP $MAINPID 
KillSignal=SIGINT 

[Install] 
WantedBy=multi-user.target

Значение каждого слова в левой части знака '=' и их эквивалента в (к более раннему) выскочке указано в ссылке https://wiki.ubuntu.com/SystemdForUpstartUsers.

Когда файл будет готов, скажем, вы назвали его «foo.service» (расширение .service важно)

Вам нужно поместить файл в /lib/systemd/system

После чего необходимо активировать услугу, позвонив

systemctl enable foo

Который предложит вам ввести свой корневой пароль, поскольку он будет создавать символические ссылки.

Если вы дошли до здесь без каких-либо хлопот, вы в порядке. Ваш сервис, следовательно, создан

sudo service foo start

systemctl status fooчтобы увидеть статус, sudo service foo stopчтобы остановить службу



0

У меня была та же проблема, это решение, которое работало для меня. Пытаться:

sudo systemctl daemon-reload

sudo systemctl включить daemon_app.service

sudo systemctl start daemon_app.service

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.