Como agendar um trabalho que depende da disponibilidade da rede?

6

Eu clonei um repositório Git de algum projeto. Eu quero automatizar git pull e compilar o projeto uma vez por semana. Eu estou usando um laptop que não estará em 24x7. Agora, não posso usar cron , pois devo manter o sistema em execução no momento exato. Eu não posso usar anacron , como pode começar antes de me conectar à rede. Existe alguma opção em anacron que executará esse trabalho específico somente quando eu estiver conectado à Internet? Ou devo usar outra ferramenta diferente para isso?

    
por balki 26.09.2012 / 21:12

2 respostas

2

Execute o trabalho quando você se conectar à rede. A maioria das distribuições tem uma infraestrutura de script que você pode conectar, embora você precise de permissões de root. Se você se conectar com o NetworkManager ou o Wicd, eles também terão sua própria infraestrutura de gancho. Adicione um cron job que só seja executado se a rede estiver disponível (e, opcionalmente, somente se o trabalho não tiver sido executado em um longo período), caso a rede permaneça conectada por um longo tempo.

Você não especifica sua distribuição, então eu darei um exemplo para uma distribuição baseada no Debian. Os scripts em /etc/network/if-up.d são executados depois que uma interface é ativada; consulte a página do manual interfaces(5) para obter mais informações. Escreva um script /etc/network/if-up.d/zzzz_balki_git_pull como este:

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

com um pull_repository_if_old que faz algo assim (execute git pull se a rede estiver disponível, a menos que haja um registro de data e hora com menos de 7 dias):

#!/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

E uma entrada crontab na sua conta:

28 4 * * * /home/balki/bin/pull_repository_if_old
    
por 27.09.2012 / 01:36
3

Use anacron , porque você não estará ativo 24 horas por dia, adicionando alguma mágica para garantir que a rede esteja ativa (fazendo ping no gateway padrão) e, se não, atrasando a execução.

Veja um script de exemplo que o aproximará:

#!/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)
    
por 27.09.2012 / 01:46