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でも出来ますかね。
ファイルの変更を動的に検知して、反映させる場合とかで便利そう。使いどころも結構ありそう。