13 votes

Systemd ne lance pas /etc/rc.local ?

Je suis en train d'utiliser Archlinux et j'ai commencé à essayer systemd ces jours-ci.

Cependant, j'ai remarqué que systemd ne charge pas mon script /etc/rc.local.

Comme mentionné sur la page Wiki, j'ai bien exécuté systemctl enable rc-local.service, mais cela n'a pas aidé.

Le contenu de mon fichier /etc/rc.local est le suivant :

echo -n 120 > /sys/devices/platform/i8042/serio1/speed
echo -n 250 > /sys/devices/platform/i8042/serio1/sensitivity
iptables --table nat -A POSTROUTING -s 192.168.0.0/16 -j MASQUERADE

Des suggestions ?

29voto

Borromini Points 291

Avec systemd 188-2, systemd se plaint de ne pas avoir de section [Install] et donc de ne pas pouvoir activer le service rc.local. Cela aurait pu être le cas avec des versions antérieures mais comme les développeurs d'Arch ont récemment annoncé que systemd deviendra le standard, je suis en train de corriger mon système.

Pour corriger cela, ajoutez simplement une section pour la cible multi-utilisateurs dans /etc/systemd/system/rc-local.service:

[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target

Créez le script /etc/rc.local et rendez-le exécutable avec chmod +x /etc/rc.local

16voto

phlatfish Points 1

Arch pourrait ne pas avoir inclus le fichier d'unité de service nécessaire pour exécuter rc.local.

Il suffit de créer un fichier /etc/systemd/system/rc-local.service avec le contenu suivant (copié tel quel depuis mon système systemd Fedora):

\#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it
#  and/or modify it
#  under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.

\[Unit\]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local

\[Service\]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

Ensuite, il suffit d'exécuter systemctl enable rc-local.service en tant que root pour l'activer. Vous pouvez également le tester/l'exécuter maintenant en exécutant systemctl start rc-local.service.

4voto

tck42 Points 41

Fichier Pkg (sur mon système) dit :

$ pkgfile --search rc-local.service
community/initscripts-systemd

Ce paquet installe autres choses que vous pourriez ne pas vouloir, mais vous pouvez le désactiver. Voir aussi : https://wiki.archlinux.org/index.php/Systemd#The_initscripts-systemd_package

2voto

Rio1 Points 29

N'oubliez pas de rendre rc.local exécutable - sinon la couche de compatibilité ne l'exécutera pas! Dans les exemples ci-dessus qui sont répertoriés - vous exécuteriez chmod a+x afin de rendre le fichier rc.local exécutable. Comme suit :

$ chmod a+X /etc/systemd/system/rc-local.service 

Je pense qu'un autre problème possible est l'emplacement de votre script rc.local! Si vous n'avez pas encore ajouté la compatibilité à systemd (ce qui devrait être intégré - et semble l'être par la mention précédente de son existence) vous devrez peut-être vérifier à nouveau l'emplacement de vos fichiers... Sur mon OS, j'ai rc-local à /etc/rc.d/rc.local donc j'ai exécuté ce qui suit :

$ sudo chmod a+x /etc/rc.d/rc.local
$ sudo systemctl restart rc-local.service
$ sudo systemctl status rc-local.service
rc-local.service - Compatibilité /etc/rc.d/rc.local
      Chargé : chargé (/lib/systemd/system/rc-local.service; statique)
      Actif : actif (terminé) depuis Fri, 13 Apr 2012 14:42:39 -0600; il y a 3 secondes
     Processus : 2285 ExecStart=/etc/rc.d/rc.local start (code=terminé, statut=0/SUCCÈS)
      Groupe de contrôle : nom=systemd:/system/rc-local.service

1voto

Chanoch Points 350

Deux problèmes courants:

  1. N'oubliez pas de rendre /etc/rc.d/rc.local exécutable. Vous pouvez utiliser

    # chmod a+rx /etc/rc.d/rc.local

    pour le rendre exécutable.

  2. N'oubliez pas de mettre une ligne #!/bin/sh en première ligne de /etc/rc.d/rc.local. Voici à quoi les choses devraient ressembler:

    #  head -1 /etc/rc.d/rc.local 
    #!/bin/sh
    # file /etc/rc.d/rc.local 
    /etc/rc.d/rc.local: script shell POSIX, texte ASCII exécutable

    Si vous n'obtenez pas une sortie similaire, modifiez /etc/rc.d/rc.local pour ajouter une ligne en haut contenant simplement #!/bin/sh.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X