web-dev-qa-db-fra.com

l'état systemctl indique inactif mort

J'essaie d'écrire mon propre service systemd (simple) qui fait quelque chose de simple (comme écrire les numéros 1 à 10 dans un fichier, en utilisant le script Shell). Mon fichier de service ressemble à ci-dessous.

[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

Ceci est mon script Shell.

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

Pour une raison quelconque, le service ne démarre pas et systemctl affiche la sortie ci-dessous.

root@TARGET:~ >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

J'essaie de comprendre ce qui n'a pas fonctionné au cours des 2 derniers jours. Quelqu'un pourrait-il m'aider ici?

Cordialement, nandanator

14
nandanator
  • Vous avez défini Type=Forking, mais votre service ne fonctionne pas. Essayez Type=oneshot
  • Vous avez un "&" votre ligne ExecStart, ce qui n'est pas nécessaire.
  • Le service est disabled, ce qui signifie qu'il n'était pas enabled de démarrer au démarrage. Vous devez exécuter systemctl enable hello pour qu'il démarre au démarrage.

Tu peux vérifier man systemd.directives pour trouver un index de toutes les directives que vous pouvez utiliser dans vos fichiers unit.

20
Mark Stosberg

Quelques points:

  1. Si tu utilises Type=forking, il est recommandé de spécifier PidFile.

  2. Dans ton cas, Type=simple et ExecStart sans & marchera.

  3. utilisation systemctl start service-name pour démarrer un service

  4. Utilisez ensuite systemctl status service-name pour vérifier son état. l'état sera inactif/mort si le service n'est pas démarré.

5