Je voudrais planifier une commande à exécuter après le redémarrage sur une boîte Linux. Je sais comment faire pour que la commande s'exécute de manière cohérente après chaque redémarrage avec une @reboot
entrée crontab, mais je ne souhaite exécuter la commande qu'une seule fois. Après son exécution, il doit être supprimé de la file d'attente des commandes à exécuter. Je recherche essentiellement un équivalent Linux à RunOnce dans le monde Windows.
Au cas où cela compte:
$ uname -a
Linux devbox 2.6.27.19-5-default #1 SMP 2009-02-28 04:40:21 +0100 x86_64 x86_64 x86_64 GNU/Linux
$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
$ cat /etc/SuSE-release
SUSE Linux Enterprise Server 11 (x86_64)
VERSION = 11
PATCHLEVEL = 0
Existe-t-il un moyen simple et scriptable de le faire?
linux
scheduled-task
Christopher Parker
la source
la source
Réponses:
Créez une
@reboot
entrée dans votre crontab pour exécuter un script appelé/usr/local/bin/runonce
.Créez une structure de répertoires appelée
/etc/local/runonce.d/ran
usingmkdir -p
.Créez le script
/usr/local/bin/runonce
comme suit:Maintenant, placez tout script que vous souhaitez exécuter au prochain redémarrage (une seule fois) dans le répertoire
/etc/local/runonce.d
etchown
et dechmod +x
manière appropriée. Une fois qu'il a été exécuté, vous le trouverez déplacé vers leran
sous - répertoire et la date et l'heure sont ajoutées à son nom. Il y aura également une entrée dans votresyslog
.la source
man logger
.$file
variable contient-elle le chemin complet ou juste le nom du fichier?J'apprécie vraiment l'effort fourni dans la réponse de Dennis Williamson . Je voulais l'accepter comme réponse à cette question, car elle est élégante et simple cependant:
Je pense que sa solution serait formidable en tant que fonctionnalité prête à l'emploi d'une distribution Linux.
Cela étant dit, j'ai écrit mon propre script pour accomplir plus ou moins la même chose que la solution de Dennis. Il ne nécessite aucune étape de configuration supplémentaire et ne nécessite pas d'accès root.
Enregistrer ce script (par exemple:
runonce
),chmod +x
et exécution:En cas de faute de frappe, vous pouvez supprimer une commande de la file d'attente runonce avec l'indicateur -r:
L'utilisation de sudo fonctionne comme vous vous y attendez. Utile pour démarrer un serveur une seule fois après le prochain redémarrage.
Quelques notes:
la source
Créez par exemple
/root/runonce.sh
:Ajouter à
/etc/rc.local
:la source
Configurez le script dans /etc/rc5.d avec un S99 et faites-le supprimer lui-même après l'exécution.
la source
Vous pouvez le faire avec la
at
commande, bien que je remarque que vous ne pouvez pas (au moins sur RHEL 5, sur lequel j'ai testé) utiliserat @reboot
ouat reboot
, mais vous pouvez utiliserat now + 2 minutes
et ensuiteshutdown -r now
.Cela ne nécessite pas que votre système prenne plus de 2 minutes pour s'exécuter.
Il peut être utile lorsque vous souhaitez configurer 0, bien que je préfère que la commande «runonce» soit un kit standard.
la source
atd
soit arrêté, votre commande peut s'exécuter pendant l'arrêt. Cela pourrait être évité en s'arrêtantatd
avant de supprimer la commande avecatd now
puis en redémarrant.Je pense que cette réponse est la plus élégante:
Placez le script
/etc/init.d/script
et supprimez-le automatiquement avec la dernière ligne:rm $0
À moins que le script ne soit à 100% infaillible, il est probablement judicieux de gérer les exceptions pour éviter une boucle d'erreur fatale.
la source
Avant,
chkconfig
mon système exécutait automatiquement un script une fois après le démarrage et plus jamais. Si votre système utilise ckconfig (Fedora, RedHat, CentOs, etc.), cela fonctionnera.D'abord le script:
run-once
/etc/init.d/
chkconfig run-once on
Lorsque le système démarre, votre script s'exécute une fois et jamais plus.
C'est-à-dire, plus jamais à moins que vous ne le vouliez. Vous pouvez toujours réactiver le script avec le
chkconfig run-once on
commande.J'aime cette solution car elle place un et un seul fichier sur le système et parce que la commande run-once peut être réémise si nécessaire.
la source
dans les systèmes redhat et debian, vous pouvez le faire depuis /etc/rc.local, c'est une sorte de autoexec.bat.
la source