Virtualbox CentOS7にincronをインストールしてみた

## はじめに
VirtualBoxですがCentOS7にてincronをインストールして動作させてみました。

### CentOS7にてincronをインストールしてみた

リポジトリの設定は以下の記事の対応をしました。
https://qiita.com/gama1234/items/cee4d198229c48adb6e6
CentOS7はサポート終了したため、yum install incrondを実行してデフォルトのリポジトリからは
パッケージが存在しません。

**epelのリポジトリからincronのパッケージはインストールできました。**


incronのパッケージをダウンロードしました。
```
# yumdownloader --resolve --destdir=./ incron

-rw-r--r--  1 root root 98362  3月 21  2019 incron-0.5.12-11.el7.x86_64.rpm
```
その後、incronのパッケージをインストールしました。
```
# rpm -ivh incron-0.5.12-11.el7.x86_64.rpm
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:incron-0.5.12-11.el7             ################################# [100%]
新しいメールが /var/spool/mail/root にあります
[root@localhost ~]#
```

### incronを動作させてみた
以下の記事が参考になりました
https://qiita.com/k-suzuki/items/4a94ebeda9ec75fdad40

incrondのサービスのステータスを確認しました。
```
# systemctl status incrond
● incrond.service - Inotify System Scheduler
   Loaded: loaded (/usr/lib/systemd/system/incrond.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
```
incrondのサービスを起動しました。
```
# systemctl start incrond
```
incrondのサービスのステータスを確認しました。
```
systemctl status incrond
● incrond.service - Inotify System Scheduler
   Loaded: loaded (/usr/lib/systemd/system/incrond.service; disabled; vendor preset: disabled)
   Active: active (running) since 金 2024-11-01 21:47:06 JST; 4s ago
  Process: 1533 ExecStart=/usr/sbin/incrond (code=exited, status=0/SUCCESS)
 Main PID: 1534 (incrond)
   CGroup: /system.slice/incrond.service
           mq1534 /usr/sbin/incrond

11月 01 21:47:06 localhost.localdomain systemd[1]: Starting Inotify System Scheduler...
11月 01 21:47:06 localhost.localdomain systemd[1]: Can't open PID file /run/incrond.pid (yet?) after start: No such file or directory
11月 01 21:47:06 localhost.localdomain incrond[1534]: loading system tables
11月 01 21:47:06 localhost.localdomain incrond[1534]: loading user tables
11月 01 21:47:06 localhost.localdomain incrond[1534]: ready to process filesystem events
11月 01 21:47:06 localhost.localdomain systemd[1]: Started Inotify System Scheduler.
```

incrontabでジョブの登録コマンドを実行したらエラーになりました。
```
# incrontab -e
editor finished with error: No such file or directory 
```
以下のサイトが参考になりました。
https://hasen.hatenablog.com/entry/2015/09/15/210350

icronの設定ファイルをバックアップを取得しました。
```
# cp -p /etc/incron.conf /etc/incron.confbk
```
以下のincronの設定ファイルの行末にeditor = viを追加しました。
```
# vi /etc/incron.conf

editor = vi
```
incronのサービス再起動しました。
```
# systemctl restart incrond
```
監視対象のファイルを作成する。
```
# touch /root/file1
```
簡単なスクリプトを作成しました。
```
# cat /root/test.sh
#!/bin/bash

echo "file1 modify" >> /root/incron_output.log
```
ジョブを登録しました。
```
incrontab -e
[監視対象ファイル] [イベント] [実行するコマンド]
/root/file1 IN_MODIFY,IN_NO_LOOP sh /root/test.sh　
```
ジョブの反映しました。
```
# incrontab -d
requesting table reload for user 'root'...
request done
```
登録したジョブを確認しました。
```
# incrontab -l
/root/file1     IN_MODIFY       sh test.sh
```
以下のフォルダに登録したジョブの情報が格納されていることを確認した。
```
# cat /var/spool/incron/root
/root/file1     IN_MODIFY       sh test.sh
```

### incronを動かしてみた
なぜかカレントディレクトリでパスを指定せずにfile1に対して文字を追記してもincronは動作しませんでした。
```
# cd /root 
# echo "文字列" >> file
```
以下の様に絶対パスでincrontab -eで指定したパス「/root/file1」で設定したら、incronが動作しました。
```
# echo "文字列" >> /root/file1
```
cronのログに/root/file1の編集イベントの後にsh test.shが実行されたログを確認しました。
```
# tail -n 2 /var/log/cron
Nov  1 22:15:32 localhost incrond[1670]: PATH (/root/file1) FILE () EVENT (IN_MODIFY)
Nov  1 22:15:32 localhost incrond[1670]: (root) CMD (sh test.sh)
```
スクリプトに設定したファイルも出力されました
```
# cat /root/incron_output.log
file1 modify
```

## まとめ

**incronはファイル変更を検知して設定したスクリプトを動作させるミドルウェアです**
ログはcronのログに出力されていることを確認しました。
incron は監視対象のファイルは絶対パスを指定する必要があるため、相対パスでは動作しないことが検証した結果、分かりました。