Comment planifier un travail qui dépend de la disponibilité du réseau?

J'ai cloné un repository Git de certains projets. Je veux automatiser git pull et comstackr le projet une fois par semaine. J'utilise un ordinateur portable qui ne sera pas sur 24×7. Maintenant, je ne peux pas utiliser cron car je devrais garder le système en cours d'exécution à ce moment précis. Je ne peux pas non plus utiliser l' anacron , car il pourrait commencer avant de me connecter au réseau. Y at-il une option dans l' anacron qui va exécuter ce travail particulier uniquement lorsque je suis connecté à Internet? Ou devrais-je utiliser un autre outil différent pour cela?

Utilisez l' anacron , parce que vous ne serez pas en ligne 24 heures sur 24, 7 jours sur 7, puis ajoutez de la magie pour vous assurer que le réseau est en place (en envoyant un signal ping à la passerelle par défaut).

Voici un exemple de script qui vous rapprochera:

 #!/bin/bash cd repo JOB="git pull" ping -c 2 $(netstat -rn | awk '/^0.0.0.0/ {print $2}') 2>&1 > /dev/null && $JOB || echo $JOB | at $(date --date="+1 hour" +%H:%M) 

Exécutez le travail lorsque vous vous connectez au réseau. La plupart des dissortingbutions ont une infrastructure de script que vous pouvez twigr, bien que vous ayez besoin d'permissions root. Si vous vous connectez avec NetworkManager ou Wicd, ils ont également leur propre infrastructure de hook. Ajoutez un travail cron qui s'exécute uniquement si le réseau est disponible (et, éventuellement, uniquement si le travail n'a pas été exécuté depuis longtime), au cas où le réseau restrait connecté pendant longtime.

Vous ne spécifiez pas votre dissortingbution, donc je donnerai un exemple pour une dissortingbution basée sur Debian. Les scripts dans /etc/network/if-up.d sont exécutés après l' /etc/network/if-up.d une interface; voir la page de manuel interfaces(5) pour plus d'informations. Écrivez un script /etc/network/if-up.d/zzzz_balki_git_pull comme ceci:

 #!/bin/sh su balki -c /home/balki/bin/pull_repository_if_old 

avec un pull_repository_if_old qui fait quelque chose comme ça (lancez git pull si le réseau est disponible sauf s'il y a un horodatage de less de 7 jours):

 #!/bin/sh set -e if [ -z "$(find /path/to/.repository.pull.timestamp -mtime -7)" ] && ping -c 1 -w 1 repository.example.com >/dev/null 2>/dev/null then cd /path/to/repository git pull touch /path/to/.repository.pull.timestamp fi EOF 

Et une input crontab sur votre count:

 28 4 * * * /home/balki/bin/pull_repository_if_old