Fehler beim Starten von <myapp> .service: Einheit <myapp> .service nicht gefunden

13

Ich habe ein super einfaches init.d-Skript für meinen Python-Bot erstellt:

#!/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

Und gesetzt torbot.pyzu sein +xund #!/usr/local/bin/pythonan der Spitze. Wenn ich versuche, es tatsächlich zu starten, erhalte ich:

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

Vermisse ich etwas?

ctote
quelle

Antworten:

4

Wenn Sie Ubuntu 16.04 oder eine neuere Version verwenden, lesen Sie möglicherweise das Dokument von systemd über das Erstellen von Servicedateien

Das Skript ist für das alte Init-System bestimmt und wird von einer älteren Kompatibilitätsebene verwaltet.

Theist
quelle
2

Für mich benutze ich Ubuntu 16.04.

Ändern Sie zunächst die Init-Funktion

. /etc/init.d/functions

zu

. /lib/lsb/init-functions

Erstellen Sie dann in der Shell symbolische Links von / etc / rc * zu meinem Skript:

sudo update-rc.d <myapp> defaults 95
Leon Wolf
quelle
Was heißt hier 95?
Gherman
@ Gherman es ist Priorität
Turson
1

Ok, ich habe einige Schritte ausprobiert, um diese Stackoverflow-Antwort ( Ausführen des Upstart-Skripts am 17.04? ) Und sie funktionierten. Mein env ist wie folgt

  1. Ubuntu am 17.10
  2. Ich habe eine Python-App auf dem Gunicorn 19.x-Server. Ich muss diese Anwendung als Dienst starten.

Zuerst müssen Sie eine foo.service-Datei schreiben.

[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

Die Bedeutung jedes Wortes auf der linken Seite des Zeichens '=' und die Entsprechung zu (dem früheren) Upstart finden Sie unter dem Link https://wiki.ubuntu.com/SystemdForUpstartUsers

Wenn die Datei fertig ist, können Sie sie als "foo.service" bezeichnen (die Erweiterung ".service" ist wichtig).

Sie müssen die Datei in platzieren /lib/systemd/system

Danach müssen Sie den Dienst durch Aufrufen aktivieren

systemctl enable foo

In diesem Fall geben Sie Ihr Root-Passwort ein, während Symlinks erstellt werden.

Wenn Sie ohne Probleme bis hierher gekommen sind, sind Sie gut. Ihr Dienst wird somit erstellt. Start erfolgt durch Anruf

sudo service foo start

systemctl status fooum den Status sudo service foo stopzu sehen, um den Dienst zu stoppen

siddharthrc
quelle
0

Hast du so etwas schon satt? Wie debugge ich Upstart-Skripte?

Können Sie die in diesem Handbuch enthaltenen Informationen bereitstellen, damit wir Sie beim potenziellen Debuggen Ihres Problems unterstützen können?

Der Kleriker
quelle
0

Ich hatte das gleiche Problem, dies ist die Lösung, die für mich funktioniert hat. Versuchen:

sudo systemctl daemon-reload

sudo systemctl enable daemon_app.service

sudo systemctl starte daemon_app.service

Erol Kalkan
quelle