webistranoでファイルをデプロイして、設定の再読み込みやサービス再起動などが必要な際に、
デプロイユーザがsudoでreloadやらrestartなどを実行しているのが、
権限的に何となく気になって、ファイルの更新を検知して
自動的にreloadやrestartする方法を模索していたら
incronという良い物があったので検証。
検証環境はScientific Linux 6.2です。
実現したいこと
- デプロイユーザとサービス再起動ユーザの分離(sudo権限の剥奪)
- Nagiosの設定ファイルをデプロイしたら、Nagiosの
reloadが自動でかかる - Passengerの
restart.txt的な感じでreload.txtがトリガーでNagiosのreload的な
incronの導入
incronをyumで導入
1
| |
incronの起動
1 2 | |
incrontabの設定
crontabと同じような感じで設定。今回はrootのincrontabを設定します。
1
| |
下記のように監視対象,トリガー,実行コマンドという形で記載
1
| |
reload.txtへのアクセス、修正などのイベントを検知し、nagiosのreloadが走るようにする。
実際にはデプロイの際に、reload.txtにtouchなどでタイムスタンプを更新して、reloadを走らせます。
(実運用ではconfigtestをかけ成功した場合にreloadするようなスクリプトを用意した方が良いです)
incrontab -dで設定の反映
1
| |
トリガーとなるイベント一覧
incrontab -tでイベントとなるトリガー一覧が確認出来ます。
- IN_ACCESS : 当該ファイルがアクセスされた
- IN_MODIFY : 当該ファイルが変更された
- IN_ATTRIB : メタデータが変更された(パーミッション、拡張属性、タイムスタンプなど)
- IN_CLOSE_WRITE : 書き込み可能ファイルの1つが閉じられた
- IN_CLOSE_NOWRITE : 書き込み不可能ファイルの1つが閉じられた
- IN_OPEN : ファイルの1つが開かれた
- IN_MOVED_FROM : 当該ディレクトリの外にファイルが出された
- IN_MOVED_TO : 当該ディレクトリの中にファイルが入れられた
- IN_CREATE : 当該ディレクトリ中にファイル/ディレクトリが新規作成された
- IN_DELETE : 当該ディレクトリ中からファイル/ディレクトリが削除された
- IN_DELETE_SELF : 当該ファイル/ディレクトリ本体が削除された
- IN_CLOSE : IN_CLOSE_WRITEとIN_CLOSE_NOWRITEの双方を対象とする
- IN_MOVE : IN_MOVED_FROMとIN_MOVED_TOの双方を対象とする
- IN_ALL_EVENTS : ここに一覧した全イベントを対象とする
- IN_DONT_FOLLOW : シンボリックリンクは参照させない
- IN_ONLYDIR : 当該パスがディレクトリの場合のみ監視させる
- IN_MOVE_SELF : 当該ファイル/ディレクトリ本体が移動された
デプロイユーザが下記のようにデプロイ後にreload.txtのタイムスタンプを
更新するとnagiosのreloadがかかるようになり、sudoの必要がなくなった。
1
| |
同じようなことはwatchrでも出来ますかね。
ファイルの変更を動的に検知して、反映させる場合とかで便利そう。使いどころも結構ありそう。