こんな感じでやった気がするメモ
環境
Install Python ライブラリ
pip install watchdog
(スクリプト実行時に依存関係でエラーになる場合があるのでその都度必要なライブラリをインストール)
ファイルが作成・変更された場合に _func() を実行
import logging
import time
from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler
logger = logging.getLogger(__name__)
class HogeHandler(PatternMatchingEventHandler):
def __init__(self, patterns):
super(HogeHandler, self).__init__(patterns=patterns)
def on_moved(self, event):
logging.info('Moved: from {} to {}'.format(event.src_path, event.dest_path))
def on_created(self, event):
logger.info('Created: {}'.format(event.src_path))
def on_deleted(self, event):
logger.info('Deleted: {}'.format(event.src_path))
def on_modified(self, event):
logger.info('Modified: {}'.format(event.src_path))
self._func(event.src_path)
def _func(self, src_path):
logger.info('Run completed: {}'.format(src_path))
def watch(path, extensions):
logging.basicConfig(
level=logging.INFO,
filename='~/hoge.log',
format='%(asctime)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
)
event_handler = HogeHandler(extensions)
observer = Observer()
observer.schedule(event_handler, path, recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
if __name__ == '__main__':
TARGET_PATH = '/var/tmp/'
extensions = ['*js']
watch(TARGET_PATH, extensions)
実行権限
$ sudo chomd 0755 ~/hoge.py
/etc/systemd/system/hoge.service
ファイル作成
[Unit]
Description=SFTP Sync Daemon
[Service]
User=istamp
ExecStart=/usr/bin/python /var/www/istamp/bin/sftp_sync.py
Restart=always
Type=notify
WatchdogSec=1
[Install]
WantedBy=multi-user.target
systemctl で登録・自動起動・実行・確認
$ sudo systemctl daemon-reload
$ sudo systemctl enable hoge.service
$ sudo systemctl is-enabled hoge.service
$ sudo systemctl start hoge.service
$ sudo systemctl status hoge.service
動作確認
$ cd /var/tmp/
$ touch fuga.js
$ tail ~/hoge.log
問題発生時は systemctl status
と sudo journalctl -xe
で確認
それから sudo reboot
で再起動して確認
$ sudo systemctl disable hoge.service
参考