Crontab job start +1 min après @reboot

45

Besoin d'un script exécuté à chaque redémarrage en +1 minute. J'ai placé un disque @rebootmais c'est trop tôt pour mon script. Comment l'exécuter après le redémarrage?

Yurij73
la source
3
Pourquoi est-ce trop tôt ? Peut-être qu'un script d'initialisation conviendrait mieux (en ce qui concerne les dépendances, par exemple, ce script nécessite la mise en réseau préalable )?
Sr.
mon script doit être exécuté après tous les autres, le dernier en mots courts
Yurij73
puisque votre travail doit être exécuté après tout et que le concept de tout est assez variable (l'ajout d'une nouvelle application autostart @ reboot n'est pas si rare), je pense qu'il vous appartient de placer votre travail dans les scripts rc dans un manière qui serveurs votre but. Placer votre tâche au bas des tâches spécifiées dans /etc/rc.local correspond généralement à ce que vous souhaitez, mais selon la configuration de démarrage de votre système, il se peut que cela ne soit pas toujours vrai. Alors, testez-le et voyez si cela fonctionne pour vous.
MelBurslan
Cela ressemble à un cas pour Upstart?
Nafg

Réponses:

69

Le script est-il uniquement destiné à s'exécuter une minute après le démarrage ou peut-il être utilisé à d'autres moments également? Dans le premier cas, vous pouvez ajouter sleep 60au début de votre script ou, dans le second cas, l'ajouter au fichier crontab:

@reboot sleep 60 && my_script.sh

Comme l'a souligné sr_, cependant, vous abordez peut-être cette question de manière inappropriée, et un script init.d ou rc.d approprié serait une solution plus robuste.

D_Bye
la source
1
Ou utilisez une option de ligne de commande pour modifier le délai (par exemple, script -s Xce qui se traduirait par l' sleep Xintérieur du script).
Peter
Puis-je appliquer cela au fichier taskrunner dans /etc/init.d/?
Andres Angel
@AndresAngel - Je suis désolé, je ne sais pas. J'utilise FreeBSD qui n'a pas taskrunner, ni d'ailleurs,/etc/init.d
D_Bye le
sur mon rhel7, dormir ne fonctionne pas du tout, il dort pour toujours et ne revient jamais.
Inder R Singh
15

Si vous avez besoin d'exécuter quelque chose après le redémarrage lorsque le réseau sera disponible, par exemple, vous pouvez écrire une unité systemd qui sera exécutée à l'heure requise (bien entendu, cela ne fonctionnera que sur les systèmes dotés de systemd).

Pour ce faire, créez un fichier /etc/systemd/system/my_script.serviceavec le contenu suivant:

[Unit]
Description=My script that requires network
After=network.target

[Service]
Type=oneshot
ExecStart=/full/path/to/my_script.sh

[Install]
WantedBy=multi-user.target

Puis exécutez:

sudo systemctl daemon-reload
sudo systemctl enable my_script

Vous avez terminé!

Envek
la source
11

Je voudrais utiliser at. Un péché:

@reboot echo /root/bin/do_the_stuff | at now + 2 minutes
# at assigns it an execution time truncated to whole minutes,
# so this means it will execute in 1--2 minutes.

... avec l'avertissement mentionné plus haut que si vous voulez vraiment l'exécuter après tout le reste, vous devriez vérifier comment le faire dans l'init utilisé par votre système d'exploitation.

claquer
la source