it-swarm.com.de

Der Status systemctl zeigt inaktiv tot an

Ich versuche, meinen eigenen (einfachen) systemd-Dienst zu schreiben, der etwas Einfaches leistet (wie das Schreiben der Nummern 1 bis 10 in eine Datei mithilfe des Shell-Skripts). Meine Servicedatei sieht wie folgt aus.

[Unit]
Description=NandaGopal
Documentation=https://google.com
After=multi-user.target

[Service]
Type=forking  
RemainAfterExit=yes
ExecStart=/usr/bin/hello.sh &

[Install]
RequiredBy = multi-user.target

Dies ist mein Shell-Skript.

#!/usr/bin/env bash

source /etc/profile
a=0
while [ $a -lt 10 ]
do
   echo $a >> /var/log//t.txt
        a=`expr $a + 1`
done

Aus irgendeinem Grund wird der Dienst nicht gestartet und systemctl zeigt die folgende Ausgabe an.

[email protected]:~ >systemctl status -l hello
* hello.service - NandaGopal
   Loaded: loaded (/usr/lib/systemd/system/hello.service; disabled; vendor     preset: enabled)
   Active: inactive (dead)
    Docs: https://google.com

Ich habe versucht herauszufinden, was in den letzten 2 Tagen schief gelaufen ist. Könnte mir bitte jemand hier helfen?

Grüße, Nandanator

14
nandanator
  • Sie haben Type=Forking, aber Ihr Dienst funktioniert nicht. Versuchen Type=oneshot
  • Sie haben ein "&" in Ihrer ExecStart Zeile, was nicht notwendig ist.
  • Der Dienst ist disabled, was bedeutet, dass es nicht enabled war, beim Booten zu starten. Du solltest rennen systemctl enable hello um es so einzustellen, dass es beim Booten startet.

Du kannst nachschauen man systemd.directives, um einen Index aller Anweisungen zu finden, die Sie in Ihren unit -Dateien verwenden können.

20
Mark Stosberg

Einige Punkte:

  1. Wenn du benutzt Type=forking, es wird empfohlen, PidFile anzugeben.

  2. In Ihrem Fall, Type=simple und ExecStart ohne & wird funktionieren.

  3. verwenden systemctl start service-name, um einen Dienst zu starten

  4. Dann benutze systemctl status service-name, um den Status zu überprüfen. Der Status ist inaktiv/tot, wenn der Dienst nicht gestartet wurde.

5