牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

vultr の ubuntu で rendertron を動かすメモ

Install nodejs

$ git clone https://github.com/riywo/anyenv ~/.anyenv
$ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.your_profile
$ echo 'eval "$(anyenv init -)"' >> ~/.your_profile
$ exec $SHELL -l
$ anyenv install ndenv
$ exec $SHELL -l
$ ndenv install -l
$ ndenv install v10.15.0
$ ndenv global v10.15.0
$ node --version
v10.15.0

Install rendertron

$ sudo apt-get install gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
$ git clone https://github.com/GoogleChrome/rendertron.git
$ cd rendertron
$ npm install
$ npm run build
$ npm run start

PM2 で npm start を永続化

$ npm instarl -g pm2
$ pm2 start npm --name rendertron -- start
$ pm2 list

確認

特定のディレクトリを監視する Python スクリプトを Ubuntu の systemd でデーモン化するメモ

こんな感じでやった気がするメモ

環境

  • ubuntu16.40
  • python2.7

Install Python ライブラリ

pip install watchdog

スクリプト実行時に依存関係でエラーになる場合があるのでその都度必要なライブラリをインストール)

特定のディレクトリを監視する python スクリプト

ファイルが作成・変更された場合に _func() を実行

# coding=utf-8
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 statussudo journalctl -xe で確認
それから sudo reboot で再起動して確認

自動起動を解除する場合

$ sudo systemctl disable hoge.service

参考