web-dev-qa-db-fra.com

Crontab commence le travail +1 min après @reboot

Besoin d'un script exécuté à chaque redémarrage en +1 minute. J'ai placé un record @reboot mais il est trop tôt pour mon script. Comment l'exécuter quelque temps après le redémarrage?

52
Yurij73

Le script ne doit-il jamais être exécuté qu'une minute après le démarrage, ou peut-il également être utilisé à d'autres moments? Dans le premier cas, vous pouvez ajouter sleep 60 au début de votre script, ou dans ce dernier cas, ajoutez-le au fichier crontab:

@reboot sleep 60 && my_script.sh

Comme l'a souligné sr_, cependant, peut-être que vous abordez ce problème de la mauvaise façon, et un bon script init.d ou rc.d serait une solution plus robuste.

76
D_Bye

Si vous devez exécuter quelque chose après le redémarrage lorsque le réseau sera disponible, par exemple, vous pouvez écrire l'unité systemd qui sera exécutée au moment requis (bien sûr, cela ne fonctionnera que sur les systèmes avec systemd).

Pour ce faire, créez le fichier /etc/systemd/system/my_script.service avec 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

Exécutez ensuite:

Sudo systemctl daemon-reload
Sudo systemctl enable my_script

Vous avez terminé!

16
Envek

J'utiliserais 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 la mise en garde supplémentaire mentionnée que si ce que vous voulez vraiment est de l'exécuter après toutes autres choses, vous devriez vérifier comment le faire dans l'initialisation que votre système d'exploitation utilise.

12
clacke