一部のプロジェクトの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
ネットワークに接続している間にタスクを実行します。ほとんどのディストリビューションには接続できるスクリプトインフラストラクチャがありますが、root権限が必要です。 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