web-dev-qa-db-fra.com

Service Init omet de l'activer une fois qu'un fichier de service SystemD est généré

Je suis dépannage d'un problème avec un service Sysvinit ne viennent pas en ligne correctement au démarrage dans un environnement SystemD. Ce que j'ai trouvé, c'est que, lorsqu'aucun fichier de service ni remplacement n'est présent dans/etc/systemd/system/pour ledit service, il est automatiquement automatique. Dans ce cas, si je comprends bien, SystemD doit être chargée de manière dynamique le script de démarrage via la lecture des scripts sysvinit "Legacy" présents sur le système, bien que je ne puisse pas être clair à 100% à ce sujet.

Ce que je suis confus, c'est que dès que je passe l'option Edit --Full à SystemCtL pour ledit service, un fichier plat est généré sur/etc/systemd/system/et ledit service échoue maintenant à l'automate au démarrage. Utilisation de l'option Modifier et essayer d'ajouter des substitutions Il semble également que le service ne parvienne pas à démarrer.

Exemples, si nécessaire, fournis ci-dessous ...

exemple du système lorsqu'il fonctionne :

Le service, dans cet exemple appelé "Prograymexample" a un script init placé dans /etc/init.d/pogramexample et aussi /etc/rc.d/init.d/pogramexample:

[root@centos7-box ~]# ls -l /etc/rc.d/init.d/programexample
-rwxr-xr-x. 1 root root 2264 Mar 29 14:11 /etc/rc.d/init.d/programexample

Aucun fichier de service présent sur/etc/systemd/system /:

[root@centos7-box ~]# ls -lh /etc/systemd/system/programexample.service
ls: cannot access /etc/systemd/system/programexample.service: No such file or directory

Sortie Système Sortie Sortie dans cette configuration:

[root@centos7-box ~]# systemctl status programexample.service
● programexample.service - LSB: Start Program Example at boot time
   Loaded: loaded (/etc/rc.d/init.d/programexample; bad; vendor preset: disabled)
   Active: active (exited) since Wed 2017-03-29 15:53:06 CDT; 14min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1297 ExecStart=/etc/rc.d/init.d/programexample start (code=exited, status=0/SUCCESS)

Mar 29 15:53:05 centos7-box systemd[1]: Starting LSB: Start ProgramExample at boot time...
Mar 29 15:53:05 centos7-box su[1307]: (to programexample) root on none
Mar 29 15:53:06 centos7-box programexample[1297]: ProgramExample (user programexample): instance name set to centos7-box
Mar 29 15:53:06 centos7-box programexample[1297]: instance public base uri set to https://192.168.0.148.programexample.net/programexample/
Mar 29 15:53:06 centos7-box programexample[1297]: instance timezone set to US/Central
Mar 29 15:53:06 centos7-box programexample[1297]: starting Java services
Mar 29 15:53:06 centos7-box programexample[1297]: ProgEx server started.
Mar 29 15:53:06 centos7-box systemd[1]: Started LSB: Start ProgramExample at boot time.

Avec la configuration ci-dessus, sans aucun fichier créé/placé dans/etc/systemd/system /, le service PUGRAMEXAMPLET automatiquement correctement.

ne fois SystemCtL Edit --Full (ou simplement Modifier) ​​est utilisé :

Une fois que toute modification est transmise à SystemCTL, j'ai observé ce qui suit:

  • Un fichier plat ou un répertoire de remplacement sera placé dans/etc/systemd/system /
  • Ledit service, dans ce cas, PROGRAMEXAMPAMPLE, ne parvient pas à démarrer au démarrage.
  • Je ne pourrai pas "activer" ledit service à l'aide de SystemCtL

Sortie Système Sortie Sortie dans cette configuration (Post Modifier):

[root@centos7-box ~]# systemctl status programexample.service
● programexample.service - LSB: Start ProgramExample at boot time
   Loaded: loaded (/etc/rc.d/init.d/programexample; static; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:systemd-sysv-generator(8)

Ceci est le fichier de service généré et placé dans/etc/systemd/system/lorsque vous utilisez l'option -edit --Full:

# Automatically generated by systemd-sysv-generator

[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/rc.d/init.d/programexample
Description=LSB: Start ProgramExample at boot time
Before=runlevel2.target
Before=runlevel3.target
Before=runlevel4.target
Before=runlevel5.target
Before=shutdown.target
Before=adsm.service
After=all.target
After=network-online.target
After=postgresql-9.4.service
Conflicts=shutdown.target

[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
ExecStart=/etc/rc.d/init.d/programexample start
ExecStop=/etc/rc.d/init.d/programexample stop
ExecReload=/etc/rc.d/init.d/programexample reload

Que se passe-t-il ici? Suis-je corrigé que sans le fichier de service de service plat et/ou le répertoire de remplacement de service dans/etc/systemd/system/que SystemD lisez de manière dynamique ces informations à partir dudit script init dudit service? J'ai essayé de nombreuses itérations d'édition du fichier de service à/etc/systemd/system/et laissant le fichier par défaut en place et que vous ne pouvez pas obtenir de l'automobile à travailler ou le service pour entrer dans un état "Activé".

Je crois qu'il serait préférable d'avoir un fichier SystemD .Service pour les configurations SystemD au lieu de s'appuyer sur SystemD à lire à partir des en-têtes de script Init Script pour des raisons de compatibilité et de simultanéité, mais le fichier de fichiers par défaut est en train de commencer à démarrer ou à activer avec de nombreux autres. Plus simples itérations du fichier .Service que j'ai tenté.

5
Toby

J'ai maintenant constaté que la question était que le fichier de service généré automatiquement par SystemD-sysv-Generator n'a pas une section d'installation avec une option Weavyby. J'ai ajouté ce qui suit à mon fichier généré à /etc/systemd/system/programxample.Service qui m'a permis d'activer correctement le service:

[Install]
WantedBy = multi-user.target

Après cela j'ai couru

systemctl daemon-reload

pour vous assurer que mon fichier de service était lu par SystemD.

Maintenant, j'ai reçu une notification appropriée que mon service était réellement ligondelé quelque part pour être "activé":

[root@centos7-box ~]# systemctl enable programexample.service
Created symlink from /etc/systemd/system/multi-user.target.wants/programexample.service to /etc/systemd/system/programexample.service.

Ce lien m'aidé mieux comprendre le fichier de service.

Je ne suis pas un fan de la façon dont SystemD-sysv-Generator n'inclut pas une section d'installation avec une option Weavieby par défaut. Si SystemD peut lire dynamiquement les en-têtes LSB et démarrer correctement les services au démarrage, pourquoi ne génère-t-il pas le fichier de service en conséquence? Je suppose que certaines douleurs de croissance systémique doivent être attendues.

7
Toby