Exécution de la commande au démarrage sur crontab

24

Je voulais exécuter une commande sur notre linux après son redémarrage terminé, j'ai vu que cela peut être fait en utilisant crontab. Je voulais exécuter cette commande

sudo ifdown eth0 && sudo ifup -v eth0

sur la crontab je peux juste faire:

@reboot sudo ifdown eth0 && sudo ifup -v eth0

ou dois-je le stocker dans un script?

Je vous remercie

Lottie
la source
7
Crontab semble être un mauvais outil pour redémarrer eth0. Pourquoi ne pas mettre cette commande (sans sudo) dans /etc/rc.local?
mikewimporte
Pourquoi avez-vous besoin de faire cela? Ces tâches sont généralement effectuées automatiquement pendant le processus de démarrage, et n'ont presque JAMAIS besoin d'être exécutées séparément des processus de démarrage automatisés ...
Thomas Ward
1
@mikewew, je ne peux pas voter pour le moment, mais je veux juste vous remercier d'avoir suggéré cela.
Lottie

Réponses:

34

Quelques notes ici avant que cela fonctionne:

  1. Ne pas utiliser sudodans un travail cron. Au lieu de cela, éditez rootle crontab au lieu du vôtre, par exemple sudo crontab -e, puis entrez les commandes sans sudo.
  2. Comme @mikewewhat l'a mentionné, c'est une utilisation étrange pour cron, et serait probablement mieux placé /etc/rc.localavant la exit 0ligne.
  3. Si vous nous dites exactement ce que vous recherchez, nous pourrions être en mesure de vous diriger vers une option de journal ou de configuration (redémarrer vos services réseau au démarrage semble un peu hack).
  4. Sur la plupart des systèmes, il @rebootdevrait également fonctionner après un arrêt brutal ou un crash, mais il existe différentes implémentations cron, donc YMMV. J'ai vu des commentaires à différents endroits affirmant les deux.

EDIT (2016/02/17): Suppression du texte de présentation incorrect sur les chemins absolus; kudos @muru
EDIT (2016/10/17): Ajout d'une note d'arrêt
EDIT (2017/09/11): Note d'arrêt révisée. Pas vraiment sûr sur celui-là.

TheSchwa
la source
ok je veux juste clarifier, je devrais simplement écrire la commande complète etc/rc.localsans le sudo. alors ce sera juste ifdown eth0 && sudo ifup -v eth0 exit 0
Lottie
cronutilise le PATHdonné en /etc/environment, qui a /sbin.
muru
J'ai fait ce que @mikewwhat a suggéré et cela a fonctionné. merci
Lottie
1
@TheSchwa devrait l'être. Au moins depuis 12.04, les /etc/pam.d/croncharges doivent pam_envdonc /etc/environmentêtre lues et le PATHjeu par défaut doit être utilisé. Cette réponse a été publiée juste avant la sortie du 12.04.
muru
2
@TheSchwa La déclaration selon laquelle le redémarrage de cron ne s'exécute pas sur un démarrage à froid est fausse. Les lignes avec redémarrage s'exécutent au démarrage du démon crond, point final. C'est que ce soit un démarrage à chaud, un démarrage à froid, ou s'il n'y avait pas de démarrage et j'ai juste arrêté manuellement crond et l'ai redémarré. Le démon crond ne sait pas pourquoi il est redémarré, il exécutera simplement des lignes de redémarrage chaque fois qu'il le fera.
Kurt Fitzner
6

Vous pouvez utiliser crontab pour cela, mais si vous l'utilisez sudo, vous aurez besoin d'une NOPASSWDrègle sudoerspour le faire. (Voir Comment exécuter un travail cron à l'aide de la commande sudo .)

Il serait plus simple de modifier /etc/rc.localet d'ajouter ces commandes avant la exit 0ligne.

muru
la source