web-dev-qa-db-fra.com

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

Je voudrais exécuter la commande simple Shell echo 1 > /proc/sys/kernel/sysrq à chaque démarrage, pour activer les clés sysrq. Quand est-ce que cela devrait être fait au démarrage, et où devrais-je mettre un script pour le faire?

26
Demi

Dépend des distributions.

Si vous êtes sur des distributions dérivées de Debian, il y a au moins deux endroits appropriés: /etc/rc.local et crontab. Vous pouvez invoquer crontab en tant que root,

   crontab -e

puis insérez cette ligne

   @reboot /home/my_name/bin/my_command

my_command est 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 ce sera exécuté en dernier. Dans tous les cas, les pls se souviennent que vous utilisez un environnement root, pas le vôtre. Aussi, pour cette raison, il est préférable d'utiliser des chemins absolus.

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

36
MariusMatutiae

Si votre système exécute une version de cron qui la prend en charge (en particulier Vixie cron), vous pouvez utiliser @reboot dans un travail cron.

C'est l'une des 8 chaînes spéciales qu'il prend en charge.

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

Au lieu des cinq premiers champs, 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 concerne @reboot, est l'heure à laquelle le démarrage de cron (8) daemon. Cela peut notamment être le cas avant que certains démons du système, ou d’autres installations, ne soient démarrés. Cela est dû à la séquence 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.

19
Keith Thompson

Presque toutes les variantes de Linux (il y a 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 faire cela. La méthode "correcte" consisterait à modifier/ajouter la ligne kernel.sysrq = 1 dans /etc/sysctl.conf

10
davidgo