ホストpingテストは常にbash
対話型コマンドラインで正しく機能します。シビン、独自のcrontabで誤動作します。 2番目のホストは常に選択され、理由を理解できません。
SHELL=/bin/bash
*/29 7-23 * * * [ -n "$(pidof unison)" ] || (partner=5.174.63.120; ping -A -c5 $partner 6 7 |grep -w "ttl" || partner=5.3.172.247; time nice unison-sync $partner &> /tmp/sync.master.dev.log )
which ping
/usr/bin/ping
これはデフォルトで5.174.63.120がホスト設定を同期する最初の選択になることを望んでいますが、この時点でpingが戻らない場合は、このラウンドに5.3.172.247を使用してください。まだ実行されていない場合unison
です。
ただし、コマンドラインで実行すると常に期待どおりに機能し、使用可能な場合は最初のIPアドレスをエコーし、そうでない場合は2番目のIPアドレスをエコーします。
partner=5.174.63.120; ping -A -c5 $partner 6 7 |grep -w "ttl" || partner=5.3.172.247; echo $partner
Ubuntuではcrontab
cliですべて動作します。
両方のオペレーティングシステム(Windows7、Linux Ubuntu 11.10、および32ビット未満のCygwin)でコンパクトで移植性の高いものを達成するためのより良い方法はありますか?
より良い点は、ホストチェックを2つ以上に一般化したいのですが、まだ簡潔なcrontab行でコーディングしたいと思います。
接続可能な場合はA、接続できない場合はB、接続可能な場合はC、その他の場合はZを使用します。
答え1
Cygwinのcrontabはフルパスを提供して/usr/bin/ping
動作します。愚かなことに、私は以前これを考慮していませんでした。シェルはすでにWindowsのバージョンよりもpingの優先順位を示しており、ずっと前に去りました。
私はcron環境(cygwinの他の多くのものと同様)の欠点を取る必要があり、私のネイティブLinuxホストと一貫性を維持することはできないと思います。ところで、これはUbuntuでも同様です/bin/ping
。
今後はCygwinの代わりにandLinuxの使用を検討してください。
誰かが圧縮されたマルチマスターフェイルオーバーのリストA..B..etc..Zのバージョンを私に見せることができればとても感謝します。
答え2
使用を検討しましたか?バランス?彼らのウェブサイトはCygwinで実行されていることを示します。 localhost:5555に継続的に同期し、RRまたはフェイルオーバーを介してポート5555を複数のホストにロードバランシングできます。