네트워크 가용성에 따라 작업을 예약하는 방법은 무엇입니까?

네트워크 가용성에 따라 작업을 예약하는 방법은 무엇입니까?

일부 프로젝트의 Git 저장소를 복제했습니다. 나는 git pull이 프로젝트를 일주일에 한 번씩 자동화하고 컴파일하고 싶습니다 . 제가 사용하는 노트북은 24x7이 아닙니다. 이제는 cron그 순간 시스템을 계속 실행해야 하기 때문에 사용할 수 없습니다 . anacron네트워크에 연결하기 전에 시작될 수 있으므로 그 중 어떤 것도 사용할 수 없습니다 . anacron인터넷에 연결되어 있을 때만 이 특정 작업을 실행하는 옵션이 있습니까 ? 아니면 이를 위해 다른 도구를 사용해야 합니까?

답변1

anacron연중무휴 24시간 온라인 상태가 아니므로 이를 사용 하고 지연이 없는 경우 네트워크가 작동되고 실행되는지 확인하기 위해 몇 가지 마법을 추가하십시오(기본 게이트웨이를 ping하여).

다음은 가까이 다가갈 수 있는 예제 스크립트입니다.

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

답변2

네트워크에 연결되어 있는 동안 작업을 실행합니다. 대부분의 배포판에는 연결할 수 있는 스크립팅 인프라가 있지만 루트 권한이 필요합니다. NetworkManager 또는 Wicd를 사용하여 연결하는 경우 자체 후킹 인프라도 있습니다. 네트워크가 오랫동안 연결되어 있는 경우를 대비하여 네트워크를 사용할 수 있을 때만 실행되는 크론 작업을 추가합니다(선택적으로 작업이 오랫동안 실행되지 않은 경우에만).

배포판을 지정하지 않았으므로 Debian 기반 배포판에 대한 예를 들어 보겠습니다. 의 스크립트는 /etc/network/if-up.d인터페이스가 호출된 후에 실행됩니다.interfaces(5)자세한 내용은 매뉴얼 페이지를 참조하세요. /etc/network/if-up.d/zzzz_balki_git_pull다음 스크립트를 작성하세요 .

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

pull_repository_if_old다음과 같이 수행합니다 ( git pull타임스탬프가 7일 미만인 경우를 제외하고 네트워크를 사용할 수 있는 경우 실행).

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

계정의 crontab 항목:

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

관련 정보