J'établis un quota sur mon serveur Linode exécutant Ubuntu 16.10 et j'obtiens le message d'erreur suivant
Ne peut pas stat () périphérique monté/dev/root: aucun fichier ou répertoire de ce type
Donc, pour résoudre ce problème, j’ai atteint ce fil pour le correctif effectué en ajoutant
ln -s /dev/xvda /dev/root
/etc/init.d/quota restart
au /etc/rc.local
. Mais Ubuntu 16.10 n’utilise plus rc.local
mais plutôt systemd . Quelle est l'alternative pour rc.local
, Comment puis-je exécuter les commandes ci-dessus au démarrage?
De plus, j'ai activé le service en utilisant systemctl enable rc-local.service
mais cela n'a pas fonctionné pour moi. Toute avance serait appréciée.
Je pense que vous ne devriez pas créer un nouveau service comme suggéré dans le lien de George. Le rc-local.service
existe déjà dans systemd et le fichier de service suggère que le rc.local
, s'il existe et qu'il soit exécutable, est extrait automatiquement dans multi-user.target
. Donc, pas besoin de recréer ou de forcer quelque chose qui est juste fait d'une autre manière par le systemd-rc-local-generator
.
Une solution rapide (je ne sais pas si c'est la manière canonique):
Dans un terminal faire:
printf '%s\n' '#!/bin/bash' 'exit 0' | Sudo tee -a /etc/rc.local
Sudo chmod +x /etc/rc.local
Sudo reboot
Ensuite, le rc.local
sera appelé au démarrage du système. Insérez ce que vous voulez.
Si vous le faites dans un terminal:
Sudo systemctl edit --full rc-local
Vous pouvez voir que le commentaire principal contient des lignes telles que:
# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.
Cela indique que dans ce système, s'il existe un fichier appelé /etc/rc.local
qui est exécutable, il sera automatiquement extrait dans le fichier multi-utilisateurs.target. Il suffit donc de créer le fichier correspondant (Sudo touch...
) et de le rendre exécutable (Sudo chmod +x ...
).
J'ai vu cette solution suggérée qui implique l'utilisation de systemd
--- here :
Créer un service:
Sudo vi /etc/systemd/system/rc-local.service
Ajoutez votre code ici:
[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 et assurez-vous que /etc/rc.local
est exécutable et ajoutez ce code à l'intérieur:
Sudo chmod +x /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0
Activer le service:
Sudo systemctl enable rc-local
Démarrer le service et vérifier l'état:
Sudo systemctl start rc-local.service
Sudo systemctl status rc-local.service
Si tout se passe bien, vous pouvez ajouter votre code
au fichier /etc/rc.local
puis le redémarrer.
Remarque: Testé sur Lubuntu 16.10.
La source:
https://www.linuxbabe.com/linux-server/how-to-enable-etcrc-local-with-systemd
Pour ajouter à réponse de Jan , contrairement au fichier rc.local
habituel, rc-local service
est exécuté non pas après le démarrage de tous les services, mais après la mise en ligne du réseau.
Dans certains cas, vous pouvez exécuter des commandes à partir de rc.local
ultérieurement. Par exemple, je voulais qu'il soit exécuté après le début du lxd
.
Dans ce cas, vous pouvez éditer les dépendances de démarrage rc-local service
en créant un fichier de configuration à insérer: /etc/systemd/system/rc-local.service.d/override.conf
avec le contenu:
[Unit]
After=network.target lxd.service
Où vous pouvez ajouter un nom d'unité nécessaire (comme j'ai ajouté lxd.service
)
N'oubliez pas de systemctl daemon-reload
après cela.