コンテキスト
2つのサーバーがあります:a NASとクライアントサーバー。どちらも小さなマシン(Raspberry、OLinuXino)であり、同じ電源タップ(電源ボタンがあります)に接続されています。
クライアントサーバーは、起動時にNASからNFSボリュームをマウントします。
問題
電源タップをオンにすると、両方のサーバーが同時に起動します。ただし、クライアントがNFSボリュームをマウントしようとした時点では、NASからはまだ利用できません。
そのため、手動でマウントする必要があり、これを自動化したいのです。
Fstabを使用して、DebianWheezyディストリビューションにボリュームをマウントします。
nas.local:/media/myshare /media/myshare nfs defaults 0 0
どうやって解決するか
そのため、NASにsshコマンドを呼び出して、クライアントに「NFSボリュームをマウントします。準備ができました!」というスクリプトを追加できると思いました。
何かのようなもの ssh -i idFile login@clientServer 'Sudo mount -a'
NAS側から。
質問
そのようなスクリプトを配置するのに最適な場所はどこですか?
NFSフック?コールバックのようなもの?
追加の質問
または、これを行うための別のより良い方法はありますか?
私はいくつかの理由で失敗から保護しようとします。ボリュームがマウントされているかどうかを確認し、マウントされていない場合はマウントするcronジョブでこれを実行できます。
使用私はからの答えを使用してスクリプトを作成します ディレクトリがbash [closed]でマウントされているかどうかを確認してください
作成しているbashスクリプトにマウントするには、Giles Answerを使用してsudoersファイルを変更し、cronスクリプトをSudoとして実行できるようにします パスワードプロンプトなしで特定のプログラムをrootとして実行する方法は? 。設定によっては、これはオプションの手順になる場合があります。
Cronジョブを設定します。あなたは2つ欲しいでしょう。 1つ目は、マウントを定期的にチェックし、そうでない場合はマウントすることです。そうすれば、どちらかが独立して失敗した場合、オンラインに戻ります。 2つ目は、起動後にcronを使用する必要があります。この回答はあなたを助けます Crontabジョブは@rebootの+1分後に開始します
サーバー側から:NFSサービス自体にスクリプトを添付できます。サービススクリプトを編集して、完了後の短いスリープ後に実行することができます。 bashスクリプトは次の形式に従うことができます。
sleep 60 && my_mount_script.sh
Systemdを使用すると、nfs.serviceが開始するのを待つことができます systemdはコマンドが完了するのを待ってから再起動/シャットダウンまたは他のプロセスを強制終了します 。置き換えには、Beforeセクションを削除してから、afterservice名をnfs.serviceに変更することが含まれます。