Supervisorは最高にクールなので最高のプログラミング言語上で動作します.

初期衝動

  • SupervisorはUNIXのシステムで(Pythonが動かないとダメ)簡単に多くのプロセスを管理できます.
  • Supervisorは簡単なINIスタイルの設定ファイルで構成されており,とてもシンプルで学習に苦労することがありません.
  • Supervisorはその利便性と簡潔さを保っているので正確に作業を行うことができます.
  • Supervisorはとりあえず,supervisorctlで操作を行うことができます.
  • Supervisorは最高にクールなので最高のプログラミング言語上で動作します.
  • SupervisorはPython 2.4以降で動作することが知られていますが、Python 3のどのバージョンでも動作しません.
  • Branchが切られてちゃんとIssues · Supervisor/supervisor · GitHub対応が進んでいるようなので安心かな?

では,はじめます

環境情報

#!/bin/bash
sleep 20
NOWTIME=`date -u +"%Y/%m/%d %I:%M:%S"`
DF=`df -h -i`
echo "${NOWTIME}"
echo -e "$n"
echo -e "${DF}"

このスクリプトは何がやりたいのか.よくわからん.

設定ファイル

設定ファイルの名前はsupervisord.confです.これらはsupervisord とsupervisorctlの両方で使用されます.

また,supervisord.confは以下の順番で参照されます

$ CWD / supervisord.conf
$ CWD / etc / supervisord.conf
/etc/supervisord.conf
/etc/supervisor/supervisord.conf(スーパーバイザ3.3.0以降)
../etc/supervisord.conf(実行ファイルを基準にして)
../supervisord.conf(実行ファイルからの相対パス)

デフォルトでは/etc/supervisor/supervisord.confに設定があり

個別の設定は以下の設定で行うことで整理することができます.

[include]
files = /etc/supervisor/conf.d/*.conf

詳しくは全部ここに書いてあります.

Configuration File — Supervisor 3.3.3 documentation

設定ファイルを書く.

/etc/supervisor/conf.d/sample_job.conf

[program:sample_job]
directory=/tmp/
command=/tmp/sample_job.sh
autostart=true
autorestart=true
startsecs=6
startretries=20

redirect_stderr=true
stdout_logfile_backups=5
stdout_logfile=/tmp/log/sample_job.log

設定は終了.詳しくは先ほど張ったURLを見てほしいのですが

直観的で非常にわかりやすいと思います. ちなみに,autorestart復活してきます. 出力の出先は/tmp/log/sample_job.logです. 一応見ときます.

$tail -n 30 /tmp/log/sample_job.log
2017/10/12 01:54:31

Filesystem     Inodes IUsed IFree IUse% Mounted on
udev             246K   436  245K    1% /dev
tmpfs            251K   636  250K    1% /run
/dev/sda1        2.9M  478K  2.5M   17% /
tmpfs            251K     6  251K    1% /dev/shm
tmpfs            251K     5  251K    1% /run/lock
tmpfs            251K    16  251K    1% /sys/fs/cgroup
tmpfs            251K    31  251K    1% /run/user/1000
2017/10/12 01:54:52

Filesystem     Inodes IUsed IFree IUse% Mounted on
udev             246K   436  245K    1% /dev
tmpfs            251K   636  250K    1% /run
/dev/sda1        2.9M  478K  2.5M   17% /
tmpfs            251K     6  251K    1% /dev/shm
tmpfs            251K     5  251K    1% /run/lock
tmpfs            251K    16  251K    1% /sys/fs/cgroup
tmpfs            251K    31  251K    1% /run/user/1000
2017/10/12 01:55:13

Filesystem     Inodes IUsed IFree IUse% Mounted on
udev             246K   436  245K    1% /dev
tmpfs            251K   636  250K    1% /run
/dev/sda1        2.9M  478K  2.5M   17% /
tmpfs            251K     6  251K    1% /dev/shm
tmpfs            251K     5  251K    1% /run/lock
tmpfs            251K    16  251K    1% /sys/fs/cgroup
tmpfs            251K    31  251K    1% /run/user/1000

コマンド

設定ファイルを記述しただけでは残念ながら動きません.Supervisorに読み込ませたり起動させたりしなければなりません.

そのために使うコマンドがsupervisorctlであります.

$ supervisorctl help

default commands (type help <topic>):
=====================================
add    exit      open  reload  restart   start   tail
avail  fg        pid   remove  shutdown  status  update
clear  maintail  quit  reread  signal    stop    version

設定ファイルを読み込んで確認します.

$ supervisorctl
supervisor> reread
sample_job: available
supervisor> update
sample_job: added process group
supervisor> status
sample_job                       RUNNING   pid 21029, uptime 0:00:07

ちなみにsupervisorctlに引数として渡してあげるだけで実行することもできます.

$ supervisorctl status
sample_job                       STARTING

各コマンドについては下記のブログが日本語だと充実している

papix.hatenablog.com

最後に

最近,根気が続かず書いてる途中に飽きる.老化だと思います.

参照

superviser_ex.conf · GitHub

supervisorctlについて調べてみた - Masteries

Supervisor: A Process Control System — Supervisor 3.3.3 documentation