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?
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
où 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.
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.
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.
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
systemd
distributions 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.Réponses:
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,
puis insérez cette ligne
où
my_command
est un fichier exécutable (chmod 755 my_command
).Alternativement, vous pouvez placer une ligne comme celle-ci
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.la source
@boot
n'existe pas, juste@reboot
debianhelp.co.uk/crontab.htmSi votre système exécute une version
cron
qui le prend en charge (spécifiquement Vixie cron), vous pouvez l'utiliser@reboot
dans 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):C'est loin d'être le seul moyen d'exécuter quelque chose au démarrage, mais c'est une alternative.
la source
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
la source