Comment activer /etc/rc.local avec Systemd

Si vous utilisez une distribution Linux qui utilise Systemd, vous pouvez constater que votre commande dans le fichier /etc/rc.local ne s’exécute pas au démarrage du système. Ce guide explique comment activer l’exécution du script /etc/rc.local au démarrage du système.

Activer /etc/rc.local sur Systemd

Si vous tapez la commande suivante dans le terminal :

sudo systemctl status rc-local

Vous pouvez obtenir cette sortie :

 rc-local.service - /etc/rc.local Compatibilité Chargé : chargé (/lib/systemd/system/rc-local.service ; static ; vendor preset : enabled) Actif : échoué (résultat : exit-code) depuis Thu 2015-11-26 23:54:58 CST ; 59s ago Processus : 1001 ExecStart=/etc/rc.local start (code=exited, status=1/FAILURE)Nov 26 23:54:57 vivid rc.local[1001] : File \"/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py\", line 920, in requireNov 26 23:54:57 vivid rc.local[1001] : needed = self.resolve(parse_requirements(requirements))Nov 26 23:54:57 vivid rc.local[1001] : File \"/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py\", line 807, in resolveNov 26 23:54:57 vivid rc.local[1001] : raise DistributionNotFound(req)Nov 26 23:54:57 vivid rc.local[1001] : pkg_resources.DistributionNotFound : shadowsocks==2.8.2Nov 26 23:54:58 vivid sudo[1008] : pam_unix(sudo:session) : session fermée pour l'utilisateur rootNov 26 23:54:58 vivid systemd[1] : rc-local.service : control process exited, code=exited status=1Nov 26 23:54:58 vivid systemd[1] : Échec du démarrage de /etc/rc.local Compatibility.Nov 26 23:54:58 vivid systemd[1] : Unit rc-local.service entered failed state.Nov 26 23:54:58 vivid systemd[1] : rc-local.service failed.

Et si vous essayez d’activer l’exécution de /etc/rc.local au démarrage du système avec la commande :

sudo systemctl enable rc-local

Vous pouvez obtenir :

Les fichiers unitaires n'ont pas de section [Install]. Ils ne sont pas destinés à être activés à l'aide de systemctl. Les raisons possibles pour avoir ce type d'unités sont : 1) Une unité peut être activée statiquement par un lien symbolique à partir du répertoire .wants/ ou .requires/ d'une autre unité. 2) Le but d'une unité peut être d'agir comme une aide pour une autre unité qui a une dépendance d'exigence sur elle. 3) Une unité peut être démarrée en cas de besoin via une activation (socket, path, timer, D-Bus, udev, appel systemctl scripté, ...).

La solution

Comme vous pouvez le voir ci-dessus, le fichier de l’unité n’a pas de section [Install]. Systemd ne peut donc pas l’activer. Nous devons d’abord créer un fichier :

sudo nano /etc/systemd/system/rc-local.service

Puis ajoutez-y le contenu suivant.

[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

Enregistrez et fermez le fichier. Pour enregistrer un fichier dans l’éditeur de texte Nano, appuyez sur Ctrl O, puis sur Enter pour confirmer. Pour quitter le fichier, appuyez sur Ctrl X. Ensuite, exécutez la commande suivante pour vous assurer que le fichier /etc/rc.local est exécutable.

sudo chmod x /etc/rc.local

Remarque : À partir de la version 16.10, Ubuntu ne fournit plus le fichier /etc/rc.local. Vous pouvez créer le fichier en exécutant cette commande.

printf \'%s\\n\' \'#!/bin/bash\' \'exit 0\' | sudo tee -a /etc/rc.local

Puis ajoutez la permission d’exécution au fichier /etc/rc.local.

sudo chmod x /etc/rc.local

Après cela, activez le service au démarrage du système :

sudo systemctl enable rc-local

Sortie :

Création d'un lien symbolique de /etc/systemd/system/multi-user.target.wants/rc-local.service vers /etc/systemd/system/rc-local.service.

Maintenant, démarrez le service et vérifiez son état :

sudo systemctl start rc-local.servicesudo systemctl status rc-local.service

Sortie :

● rc-local.service - /etc/rc.local Compatibilité Loaded : chargé (/etc/systemd/system/rc-local.service ; enabled ; vendor preset : enabled) Active : actif (en cours d'exécution) depuis Fri 2015-11-27 00:32:56 CST ; 14min ago Processus : 879 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS) Main PID : 880 (watch) CGroup : /system.slice/rc-local.service

Cron @reboot

Si la méthode ci-dessus ne fonctionne pas pour vous, ou si vous souhaitez simplement que quelques commandes simples soient exécutées au démarrage du système, vous pouvez également utiliser la fonctionnalité @reboot de cron pour exécuter automatiquement une commande au démarrage du système. Par exemple, je veux que mon client shadowsocks démarre automatiquement, donc j’ouvre le fichier cron de l’utilisateur root’s :

sudo crontab -e

Et mettez la ligne suivante à la fin de celui-ci.

@reboot /usr/bin/sslocal -c /etc/shadowsocks.json -d start

Sauvegardez et fermez le fichier.

Dans certaines distributions Linux comme archlinux, le démon cron n’est pas activé par défaut. Vous devez donc l’activer manuellement. Pour l’activer sous archlinux, entrez la commande suivante dans le terminal.

sudo systemctl enable cronie

Shadowsocks est un proxy socks5 qui peut être utilisé pour contourner les pare-feu Internet. Si vous êtes intéressé, cliquez sur le lien ci-dessous pour apprendre à configurer votre propre serveur shadowsocks.

  • Configurer votre propre serveur shadows sur Debian, Ubuntu et Centos

Comment utiliser Systemd

Vous voulez en savoir plus sur systemd pour gérer efficacement votre système ? Veuillez lire le tutoriel suivant.

  • Comment utiliser Systemd pour gérer les services, les niveaux d’exécution et les journaux sous Linux
Scroll to Top