web-dev-qa-db-ja.com

スクリプトを許可するためにNFSへのコールバックを設定するにはどうすればよいですか?

コンテキスト

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フック?コールバックのようなもの?

追加の質問

または、これを行うための別のより良い方法はありますか?

2
lauhub

私はいくつかの理由で失敗から保護しようとします。ボリュームがマウントされているかどうかを確認し、マウントされていない場合はマウントするcronジョブでこれを実行できます。

  1. 使用私はからの答えを使用してスクリプトを作成します ディレクトリがbash [closed]でマウントされているかどうかを確認してください

  2. 作成しているbashスクリプトにマウントするには、Giles Answerを使用してsudoersファイルを変更し、cronスクリプトをSudoとして実行できるようにします パスワードプロンプトなしで特定のプログラムをrootとして実行する方法は? 。設定によっては、これはオプションの手順になる場合があります。

  3. Cronジョブを設定します。あなたは2つ欲しいでしょう。 1つ目は、マウントを定期的にチェックし、そうでない場合はマウントすることです。そうすれば、どちらかが独立して失敗した場合、オンラインに戻ります。 2つ目は、起動後にcronを使用する必要があります。この回答はあなたを助けます Crontabジョブは@rebootの+1分後に開始します

サーバー側から:NFSサービス自体にスクリプトを添付できます。サービススクリプトを編集して、完了後の短いスリープ後に実行することができます。 bashスクリプトは次の形式に従うことができます。

sleep 60 && my_mount_script.sh

Systemdを使用すると、nfs.serviceが開始するのを待つことができます systemdはコマンドが完了するのを待ってから再起動/シャットダウンまたは他のプロセスを強制終了します 。置き換えには、Beforeセクションを削除してから、afterservice名をnfs.serviceに変更することが含まれます。

2
DarkSheep