J'ai un script que j'aimerais exécuter lorsque mon système démarre. Je l'ai mis sur "rc.local", mais cela ne fonctionne pas. Comment puis-je l'activer au démarrage?
Où se trouve la commande xsetwacom? /etc/rc.local est exécuté avec un PATH très simple au démarrage. Cela diffère probablement du PATH que vous avez connecté au terminal. Dans le terminal, tapez: type -p xsetwacom puis remplacez la commande "xsetwacom" dans /etc/rc.local par le chemin complet, tel qu'il est renvoyé par le "type -p". Devez-vous effectuer des initialisations manuelles avant que xsetwacom ne fonctionne pour vous?
Waltinator
3
En utilisant systemd comme gestionnaire de démarrage, assurez-vous que la compatibilité rc.local fonctionne:systemctl status rc-local.service
rubo77 le
Le commentaire de Waltinator était mon problème. En raison du chemin minimal, il ne savait pas comment exécuter les scripts que je voulais exécuter. Le chemin chargé sur mon système Ubuntu 14.04 au moment de l'exécution de /etc/rc.local était le suivant: / sbin: / usr / sbin: / bin: / usr / bin ... vous pouvez vérifier le vôtre en mettant echo $PATH > /home/rc_local_pathdans votre / etc / rc.local, puis vérifiez le fichier après son exécution au démarrage.
Utilisez-le sudo systemctl enable rc-local.servicepour vous assurer qu'il /etc/rc.local est exécuté lors du démarrage du serveur
William
Réponses:
56
Pouvez-vous exécuter votre script manuellement? Sinon, c'est un problème avec ce script; sinon regardez plutôt rc.local. (Si ce script doit être exécuté en tant que root, vous devez utiliser sudo pour l'exécuter manuellement.)
Assurez-vous que /etc/rc.local est exécutable et que le script qu’il appelle est également exécutable.
$ ls -l /etc/rc.local-rwxr-xr-x 1 root root 4192010-08-2711:26/etc/rc.local
Assurez-vous que rc.local a une ligne shebang (qui est la valeur par défaut):
Oui, je peux exécuter le script manuellement. Comment puis-je m'assurer que /etc/rc.local est exécutable? Qu'est-ce que je dois taper? Est-ce "$ ls -l /etc/rc.local -rwxr-xr-x 1"? Merci!
pedroo
@ pedroo: J'ai copié exactement ce que je vois dans mon terminal (vous voyez donc l'invite, l'entrée et la sortie ci-dessus). La commande est "ls -l /etc/rc.local" et si elle est exécutable, elle aura ces X dans la sortie.
3
J'ai essayé le "ls -l /etc/rc.local" et il est exécutable, mais je ne peux pas le faire fonctionner au démarrage ... Une idée?
pedroo
1
@pedroo: Le serveur X doit être en cours d'exécution, ce qui ne se produit pas lorsque rc.local est exécuté. Le lancer à partir de rc.local le fera simplement quitter sans rien faire (bien que j'espère qu'il mette un message dans syslog ou ailleurs). Vous devez plutôt placer les commandes xsetwacom dans ~ / .xinitrc ou / etc / X / xinit / xinitrc.
1
@pedroo: Parce que rc.local contient des commandes destinées à être exécutées à une heure différente. Créez un nouveau fichier, vous pouvez le mettre dans ~ / bin , le marquer comme exécutable (chmod ou propriétés dans Nautilus), créer la première ligne "#! / Bin / bash", puis placer vos commandes sur des lignes ultérieures.
53
Dans mon cas, aucune des instructions n’était une solution parfaite. Si vous étiez aussi malchanceux que moi, essayez celui-ci détaillé
Placez tout votre code d'exécution dans un fichier texte séparé portant un nom quelconque, tel que foo.sh, et enregistrez-le à un endroit quelconque.
Ajouter
#!/bin/sh
comme première ligne de votre code.
Essayez d’exécuter votre foo.sh en
sudo foo.sh
pour vérifier il n'y a pas d'erreur du tout.
Indiquez à votre script /etc/rc.local le chemin complet et le nom de votre script créé après la commande sh
sh '/path/to/your/script/foo.sh'
N'oubliez pas de mettre la ligne ci-dessus avant la dernière ligne de code
exit 0
à la fin du script /etc/rc.local.
Vérifiez la première ligne de /etc/rc.local pour être
#!/bin/sh -e
Rendez votre /etc/rc.local exécutable au cas où il ne serait pas déjà exécutable par
L'étape 8 était la clé, vérifiant que le script s'exécutera dans l'environnement de démarrage. Dans mon cas, je dois donner le chemin complet à la commande.
Peter Gluck
Préfet et pas à pas, il fonctionne sur des centos, mais d’ sudo /etc/rc.local startabord.
A1Gard
Merci - cette décomposition m'a vraiment aidé et, comme ci-dessus, l'étape 8 a été la clé pour moi aussi! Sans cela, il ne faudrait pas rediriger +1 (pour référence, l'application de nœud s'exécutant sur le serveur cloud bitnami utilise toujours pour une exécution continue).
Fidev
L'étape 8 était un bon conseil, mais je pense que l'étape 7 pourrait être la solution, j'essayais d'exécuter le script en utilisant cron pour ouvrir un tunnel, mais cela échouait de manière aléatoire.
SeanClt
28
Sur les nouvelles versions d'Ubuntu systemdest utilisé et /etc/rc.localn'est pas toujours chargé par défaut.
Vérifiez si le service de compatibilité est chargé avec
systemctl status rc-local.service
S'il contient actif (quitté), votre réglage semble correct et vous risquez de rencontrer une autre erreur dans votre /etc/rc.localfichier (il peut s'agir d'une commande qui échoue, par exemple).
systemctl status rc-local.service
echo $PATH > /home/rc_local_path
dans votre / etc / rc.local, puis vérifiez le fichier après son exécution au démarrage.rc.local
fichier!sudo systemctl enable rc-local.service
pour vous assurer qu'il/etc/rc.local
est exécuté lors du démarrage du serveurRéponses:
Pouvez-vous exécuter votre script manuellement? Sinon, c'est un problème avec ce script; sinon regardez plutôt rc.local. (Si ce script doit être exécuté en tant que root, vous devez utiliser sudo pour l'exécuter manuellement.)
Assurez-vous que /etc/rc.local est exécutable et que le script qu’il appelle est également exécutable.
Assurez-vous que rc.local a une ligne shebang (qui est la valeur par défaut):
la source
Dans mon cas, aucune des instructions n’était une solution parfaite. Si vous étiez aussi malchanceux que moi, essayez celui-ci détaillé
Ajouter
comme première ligne de votre code.
Essayez d’exécuter votre foo.sh en
pour vérifier il n'y a pas d'erreur du tout.
Indiquez à votre script /etc/rc.local le chemin complet et le nom de votre script créé après la commande sh
N'oubliez pas de mettre la ligne ci-dessus avant la dernière ligne de code
à la fin du script /etc/rc.local.
Vérifiez la première ligne de /etc/rc.local pour être
Rendez votre /etc/rc.local exécutable au cas où il ne serait pas déjà exécutable par
Vérifiez que tout fonctionne bien en exécutant
la source
sudo /etc/rc.local start
abord.Sur les nouvelles versions d'Ubuntu
systemd
est utilisé et/etc/rc.local
n'est pas toujours chargé par défaut.Vérifiez si le service de compatibilité est chargé avec
S'il contient actif (quitté), votre réglage semble correct et vous risquez de rencontrer une autre erreur dans votre
/etc/rc.local
fichier (il peut s'agir d'une commande qui échoue, par exemple).la source
2 suggestions.
Le script cible exécute-t-il une commande sudo ? Si c'est le cas, vous voudrez peut-être lui fournir le mot de passe sudo.Ma faute. Il suffit de vérifier un alors. Merci pour la correction enzotib :)
la source
rc.local
est exécuté en tant que root, aucun mot de passe n'est nécessaire.