Comment puis-je exécuter une commande après le démarrage?

27

Je voudrais exécuter la commande shell simple echo 1 > /proc/sys/kernel/sysrqà chaque démarrage, pour activer les clés sysrq. Au démarrage, cela doit-il être fait et où dois-je mettre un script pour le faire?

Demi
la source
Toutes les distributions Linux fixent déjà l'heure. Peut-être que la batterie de votre RTC sur la carte mère est faible?
Certains programmeur mec
@JoachimPileborg en fait il n'y a pas de RTC sur ma carte mère :) C'est une carte système intégrée sans RTC.
2
Je vous prie de différer, @davidgo. Les références que vous citez sont un peu obsolètes: bien que crontab fonctionne, /etc/rc.local ne fonctionne pas sur les systemddistributions comme Arch Linux. En faisant référence à eux, nous pourrions envoyer Demetri dans une chasse aux oies sauvages. Parfois, une mise à jour doit être effectuée.
MariusMatutiae

Réponses:

37

Dépend des distributions.

Si vous utilisez des distributions dérivées de Debian, il y a au moins deux emplacements appropriés, /etc/rc.local et crontab. Vous pouvez appeler crontab en tant que root,

   crontab -e

puis insérez cette ligne

   @reboot /home/my_name/bin/my_command

my_commandest un fichier exécutable ( chmod 755 my_command).

Alternativement, vous pouvez placer une ligne comme celle-ci

   /home/my_name/bin/my_command

dans /etc/rc.local, et cela sera exécuté en dernier. Dans tous les cas, les pls se souviennent que vous utilisez l'environnement root, pas le vôtre. Pour cette raison également, il est préférable d'utiliser des chemins absolus.

Si vous êtes sur une distribution systemd (Arch Linux, Fedora 19, ...) la première option (crontab) est toujours valide, tandis que la seconde (/etc/rc.local) n'existe plus. Dans ce cas, vous devez apprendre à démarrer un service géré systemctl, mais cela peut être plus que ce que vous aviez prévu avec votre simple question.

MariusMatutiae
la source
1
Pouvez-vous confirmer cela pour Fedora? Ma recherche me dit que rc.local fonctionnera toujours s'il existe et est exécutable, mais n'est pas configuré par défaut. J'ai perçu des ramifications troublantes si rc.local ne fonctionne pas! (Je n'ai pu trouver des références pour cela que pour Fedora 18 - forums.fedoraforum.org/showthread.php?t=291889 )
davidgo
Vous avez raison, dans Fedora 19, vous pouvez toujours l'avoir, si vous le voulez vraiment. Mais il n'est plus conditionné, docs.fedoraproject.org/en-US/Fedora/16/html/Release_Notes/… bullet 3.2.4. De plus, il n'existe pas complètement dans Arch Linux, j'ai donc pensé qu'il était sûr d'inclure un avertissement à ce sujet.
MariusMatutiae
2
peut-être que c'est un alias inconnu pour moi mais @bootn'existe pas, juste @reboot debianhelp.co.uk/crontab.htm
Zarathustra
19

Si votre système exécute une version cronqui le prend en charge (spécifiquement Vixie cron), vous pouvez l'utiliser @rebootdans une tâche cron.

Il s'agit de l'une des 8 chaînes spéciales qu'il prend en charge.

Citant la crontab(5)page de manuel (de mon système Ubuntu 12.04):

Au lieu des cinq premiers champs, l'une des huit chaînes spéciales peut apparaître:

string         meaning
------         -------
@reboot        Run once, at startup.
@yearly        Run once a year, "0 0 1 1 *".
@annually      (same as @yearly)
@monthly       Run once a month, "0 0 1 * *".
@weekly        Run once a week, "0 0 * * 0".
@daily         Run once a day, "0 0 * * *".
@midnight      (same as @daily)
@hourly        Run once an hour, "0 * * * *".

Veuillez noter que le démarrage, en ce qui @rebootconcerne, est le moment où le démarrage du démon cron (8) . En particulier, cela peut se produire avant le démarrage de certains démons système ou d'autres fonctionnalités. Cela est dû à la séquence d'ordre de démarrage de la machine.

C'est loin d'être le seul moyen d'exécuter quelque chose au démarrage, mais c'est une alternative.

Keith Thompson
la source
2
Comment cette réponse a-t-elle pu être écrite plus d'un an avant la question d'origine?
MariusMatutiae
1
@MariusMatutiae meta.stackoverflow.com/q/294543/827263
Keith Thompson
+1 pour spécifier qui nécessite Vixie cron.
Javier Arias
10

Presque toutes les variantes de Linux (remontant très longtemps) ont un fichier /etc/rc.local qui s'exécute au démarrage - vous pouvez simplement y ajouter la commande.

Cela dit, vous n'avez même pas besoin de le faire. La manière "correcte" serait de modifier / ajouter la ligne kernel.sysrq = 1 dans /etc/sysctl.conf

davidgo
la source