Nie udało się uruchomić <mojaapp>. Usługa: Nie znaleziono jednostki <moja aplikacja>. Usługa

13

Stworzyłem super podstawowy skrypt init.d dla mojego bota 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

I ustaliły torbot.pysię +xi #!/usr/local/bin/pythonna szczycie. Kiedy jednak próbuję go uruchomić, otrzymuję:

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

Czy coś brakuje?

cytat
źródło

Odpowiedzi:

4

Jeśli używasz systemu Ubuntu 16.04 lub nowszego, możesz przejrzeć dokumentację systemd na temat tworzenia plików serwisowych

Skrypt jest przeznaczony dla starego systemu init i jest zarządzany przez starszą warstwę zgodności.

teista
źródło
2

Dla mnie używam Ubuntu 16.04.

Najpierw zmień funkcję init

. /etc/init.d/functions

do

. /lib/lsb/init-functions

Następnie w powłoce utwórz dowiązania symboliczne z / etc / rc * do mojego skryptu:

sudo update-rc.d <myapp> defaults 95
Leon Wolf
źródło
Co znaczy tutaj 95?
Gherman,
@Gherman to priorytet
turson
1

Ok, próbowałem kilka kroków, odpowiedź ta przepełnienie stosu ( Uruchamianie skryptu upstart 17.04? ) I zadziałały Moja env jest następująca

  1. Ubuntu o 17.10
  2. Mam aplikację python na serwerze Gunicorn 19.x, muszę uruchomić tę aplikację jako usługę.

Najpierw musisz napisać plik 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

Znaczenie każdego słowa po lewej stronie znaku „=” i jego odpowiednika w (wcześniejszym) upstart znajduje się w linku https://wiki.ubuntu.com/SystemdForUpstartUsers

Gdy plik będzie gotowy, powiedzmy, że nazywasz go „foo.service” (rozszerzenie .service jest ważne)

Musisz umieścić plik w /lib/systemd/system

Następnie musisz włączyć usługę, dzwoniąc

systemctl enable foo

Co spowoduje wyświetlenie monitu o podanie hasła roota podczas tworzenia dowiązań symbolicznych.

Jeśli dotarłeś do tego miejsca bez żadnych problemów, jesteś dobry. Twoja usługa została utworzona. Rozpocznij przez telefon

sudo service foo start

systemctl status fooaby zobaczyć status sudo service foo stopzatrzymania usługi

siddharthrc
źródło
0

Czy zmęczyłeś się czymś takim? Jak debugować skrypty Upstart?

Czy możesz podać dane wyjściowe zawarte w tym przewodniku, abyśmy mogli pomóc Ci potencjalnie rozwiązać problem?

Kleryk
źródło
0

Miałem ten sam problem, oto rozwiązanie, które działało dla mnie. Próbować:

sudo systemctl daemon-reload

sudo systemctl enable daemon_app.service

sudo systemctl start daemon_app.service

Erol Kalkan
źródło