• ベストアンサー

タイムスタンプ更新時にシェルを実行する方法

事前に、とあるシェルを準備して保存しておきます。 特定のファイルのタイムスタンプが更新されたら 即、その準備しておいたシェルを実行する方法はありますでしょうか? cronで実行するのではなく、そのファイルの更新された時のみ即、実行したいのです。 OSはCentOSになります。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • u-kid
  • ベストアンサー率50% (34/67)
回答No.4

inotify-toolsがインストールされていなければ、インストールしてください。あとはExpampleのシェルスクリプトを自分の必要に応じて変更し、起動しておくだけです。 >サーバAに対してユーザーの追加、削除または、各種confファイルの編集等を行います。 >それを更新した時点で、サーバBの同じディレクトリにへ転送(コピー)したいのです。多少の時間差は構いません。 そういう用途でしたら、rsyncをcronで回せば十分だと思います。 また両方のサーバーでユーザー情報を共有するのでしたら、NISを使う方が良いでしょう。

noname#164909
質問者

補足

回答有難うございます。 rsyncで検討する事にします。

その他の回答 (3)

  • u-kid
  • ベストアンサー率50% (34/67)
回答No.3

linux kernel-2.6.13からinotify(7)システムコールが提供されていて、ファイルシステムイベントを監視することができるようになっています。 このシステムコールを利用するinotify-toolsというパッケージに含まれるinotifywaitというプログラムを用いるとファイルの更新などのイベントをトリガにして何かをさせることができます。Debian 4.0で確認していますが、CentOSにもパッケージがあるようですので利用できるはずです。 inotifywait(1)のman pageのexample2に特定のファイル更新をトリガにするシェルスクリプトの例が載っているので参考にしてください。

noname#164909
質問者

補足

回答有難うございます。 調べてみたのですが、実際なにからはじめたら良いのか分かりませんでした。 もう少し詳しく教えて頂けないでしょうか? ちなみに、具体的に今回何をしたいかと言うと、サーバAとサーバBがあり、 サーバAに対してユーザーの追加、削除または、各種confファイルの編集等を行います。 それを更新した時点で、サーバBの同じディレクトリにへ転送(コピー)したいのです。多少の時間差は構いません。 (サーバAとサーバBはほぼ同一の構成になります) 他にも方法があれば、ぜひよろしくお願いします。

回答No.2

私は使ったことはないのですが、Dazukoというカーネルモジュールを使うと実現できるようです。

参考URL:
http://www.usupi.org/info/dazuko.html
noname#164909
質問者

補足

回答有難うございます。 今回は、rsyncで検討する事としました。 dazukoは初めて聞きましたが、別の機会にこちらを検討してみます。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

無いはずです。 そのような動きをプログラムはWindows/Linuxともありますけど、いずれも短時間の待ちを置きながら、繰り返しチェックしているはずです。

noname#164909
質問者

補足

回答ありがとうございます。 タイムスタンプをチェックするのはcronで定期的にやることになるかと思います。それは構いません。 多少の待ち時間が生じるのも構いません。 その結果、更新(変更)があればシェルを実行出来ればよいだけです。

関連するQ&A