web-dev-qa-db-fra.com

SystemD ne fonctionne pas /etc/rc.local?

J'utilise Archlinux et j'ai commencé à essayer Système ces jours-ci.

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

Comme mentionné dans la page Wiki, j'ai eu la course systemctl enable rc-local.service, mais cela n'a pas aidé.

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

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

Aucune suggestion?

12
Felix Yan

Pkgfile (sur mon système) dit:

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

Cet emballage installe d'autres choses que vous ne pouvez peut-être pas, mais vous pouvez le désactiver. Voir aussi: https://wiki.archlinux.org/index.php/systemd#the_initscripts-systemd_package

4
tck42

N'oubliez pas de faire de l'exécutable RC.Local - ou la couche de compatibilité ne fonctionnera 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 penserais qu'un autre problème possible est l'emplacement de votre script RC.Local! Si vous n'avez pas déjà ajouté la compatibilité à SystemD (qui devrait être construite - et semble être la première mention de celui-ci existant déjà), vous devrez peut-être vérifier votre lieu de contrôle de vos fichiers ... sur mon système d'exploitation que j'ai rc-local à /etc/rc.d/rc.local, donc j'ai couru 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 - /etc/rc.d/rc.local Compatibility
      Loaded: loaded (/lib/systemd/system/rc-local.service; static)
      Active: active (exited) since Fri, 13 Apr 2012 14:42:39 -0600; 3s ago
     Process: 2285 ExecStart=/etc/rc.d/rc.local start (code=exited, status=0/SUCCESS)
      CGroup: name=systemd:/system/rc-local.service
2
Rio1

Deux gothas communs:

  1. N'oubliez pas de faire /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 un #!/bin/sh ligne dans la première ligne de /etc/rc.d/rc.local. Voici comment les choses devraient regarder:

    #  head -1 /etc/rc.d/rc.local 
    #!/bin/sh
    # file /etc/rc.d/rc.local 
    /etc/rc.d/rc.local: POSIX Shell script, ASCII text executable
    

    Si vous ne recevez pas une sortie similaire, modifiez /etc/rc.d/rc.local Pour ajouter une ligne au même sommet contenant juste #!/bin/sh.

1
D.W.

Si tu as /etc/rc.local En tant que fichier exécutable, il sera tiré dans le processus de démarrage par systemd-rc-local-generator/rc-local.service.

Au moins /etc/rc.local est le chemin d'accès par défaut utilisé, mais cela est défini par la distribution. Parce que c'est principalement pour la compatibilité en arrière et que différentes distributions utilisaient des chemins différents. Par exemple. Sur Fedora, le chemin est /etc/rc.d/rc.local. Vous pouvez vérifier le chemin comme suit:

$ systemctl cat rc-local.service
# /usr/lib/systemd/system/rc-local.service
# ...

# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.d/rc.local is executable.
[Unit]
Description=/etc/rc.d/rc.local Compatibility
ConditionFileIsExecutable=/etc/rc.d/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.d/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

Il semble que cela ne soit pas très bien connu. Plusieurs messages montrent une version précédente du fichier, qui n'a pas de tel commentaire.

1
sourcejedi