• 日本語
  • English

Pysilhouette


Pysilhouetteとは

逐次的に登録されたジョブ(コマンド)を実行する機能を有するジョブマネジャーです。
並列処理も可能になりました。(Since 0.7)
主にウェブアプリケーションのバックグラウンド処理を実現するために開発されています。
    

特徴

  • 100% Pure Pythonで開発されているアプリケーションです。
  • シンプルな監視機能を有し、信頼性を向上させています。
  • ジョブグループ単位で実行されそのなかで複数のジョブを実行することができます。
  • 各ジョブ単位でロールバック処理を追加することができます。
  • 複数のデータベースをサポートしています。

Version 0.6.xからのアップデートについて

Version 0.6について

ダウンロード

機能一覧

# 機能名 説明 対応状況
1 ジョブマネージャ監視 マネージャが異常終了した場合、設定した数だけ再起動することができます。
また、期間指定するなど高度な設定も可能です。
2 コマンド実行制御
   - ホワイトリスト
実行可能なジョブをホワイトリスト形式で制御することができます。
3 ジョブタイムアウト ジョブ実行時のタイムアウトを設定することができます。
4 ログ出力 マネージャ、データベースなどのログを出力することができます。
また、ログのローテートやsyslog出力など、python loggingに対応するすべての出力機能に対応しています。
5 ジョブグループ 複数のジョブをグループ化し、指定した順番で実行することができます。
6 ロールバック機能 ジョブに失敗した場合に、実行するコマンドを設定することができます。
7 フィニッシュコマンド機能 ジョブ終了後に、実行するコマンドを設定することができます。
8 マルチホスト対応 各ホストのPysilhouetteにユニークなキーを設定しておくことで、
1データベース、Nホストに対応することが可能です。
9 即時ジョブ実行 指定したジョブを即時実行することができます。(Since 0.7)
10 スケジュール実行 指定した時間でジョブを実行することができます。 ×

ライセンス

Pysilhouetteは、MITライセンスを採用しています。

環境

  • 必須パッケージ

    • Python >= 2.4.x
    • SQLAlchemy >= 0.5.x
  • データベース

    • SQLite
    • MySQL
    • PostgreSQL
    Pysilhouetteは、SQLAlchemyを使用してデータベースに接続しています。
    サポートしているデータベースの詳細は、こちらを参照してください。
    

チュートリアル

ソースのINSTALLを参照してください。

E-R 図

こちらへ

設定ファイルの説明

  • log.conf

  • ログに関する設定を行う設定ファイルです。
    デフォルトパスは、/etc/opt/pysilhouette/log.confです。
    
    Pysilhouetteのロギング機能は、Python loggingを使用しています。
    設定ファイルの詳細は、こちらを参照してください。
    
  • whitelist.conf

  • ホワイトリストに関する設定を行う設定ファイルです。
    デフォルトパスは、/etc/opt/pysilhouette/whitelist.confです。
    
    Pysilhouetteで実行を許可したいコマンドを書きます。
    コマンドは改行で区切られます。
    
    例)
    /bin/echo
    /bin/ls
    /bin/pwd
    
  • silhouette.conf

  • Pysilhouetteに関する設定を行う設定ファイルです。
    デフォルトパスは、/etc/opt/pysilhouette/silhouette.confです。
    

    env.python

    Pythonコマンドのパスを設定します。
    
    例) env.python=/usr/bin/python
    

    env.sys.log.conf.path

    ログ出力設定ファイルパスを設定します。
    ログ出力設定ファイルついてはこちらを参照してください。
    
    例) application.log.config=/etc/opt/pysilhouette/log.conf
    

    env.uniqkey

    マルチホスト構成時に、Pysilhouetteを判別する値を設定します。
    Pysilhouette毎に一意である必要があります。
    0~9, a~fまでの半角英数字が使えます。
    フォーマットは8文字-4文字-4文字-4文字-12文字です。
    各文字列の間は-(ハイフン)で区切ってください。
    
    例) env.uniqkey=aaaaaaaa-0000-0000-0000-aaaaaaaaaaaa
    

    daemon.stdin

    Pysilhouetteのデーモンの標準入力の設定です。
    
    例) daemon.stdin=/dev/null
    

    daemon.stdout

    Pysilhouetteのデーモンの標準出力の設定です。
    
    例) daemon.stdout=/var/log/pysilhouette/stdout.log
    

    daemon.stderr

    Pysilhouetteのデーモンの標準エラーの設定です。
    
    例) daemon.stdout=/var/log/pysilhouette/stdout.log
    

    observer.target.python

    監視デーモンで使用するPythonコマンドのパスを設定します。
    
    例) observer.target.python=/usr/bin/python
    

    observer.target.scheduler

    監視デーモンで監視するスケジューラーのパスを設定します。
    スケジューラーは、JOBの実行をスケジューリングするデーモンです。
    
    例) observer.target.scheduler=/opt/pysilhouette/lib/python/pysilhouette/scheduler.py
    

    observer.target.performer

    監視デーモンで監視するパフォーマーのパスを設定します。
    パフォーマーは、JOBを実行するデーモンです。
    
    例) observer.target.performer=/opt/pysilhouette/lib/python/pysilhouette/performer.py
    

    observer.target.asynscheduler

    監視デーモンで監視する並列処理スケジューラーのパスを設定します。
    並列処理スケジューラーは、JOBを並列スケジューリングするデーモンです。
    
    例) observer.target.asynscheduler=/opt/pysilhouette/lib/python/pysilhouette/asynscheduler.py
    

    observer.target.performer

    監視デーモンで監視する並列処理パフォーマーのパスを設定します。
    並列処理パフォーマーは、JOBを並列実行するデーモンです。
    
    例) observer.target.asynperformer=/opt/pysilhouette/lib/python/pysilhouette/asynperformer.py
    

    observer.restart.count

    この設定は、監視デーモンがスケジューラーやパフォーマーの停止を
    検知したときに、停止回数の合計がobserver.restart.countの超えるまで、
    再起動を試みます。
    停止回数の合計がobserver.restart.countの超えたときPysilhouetteを停止します。
    監視デーモンが停止を検知した回数は、ステータスファイルに保持されます。
    
    例) observer.restart.count=5
    

    observer.restart.count.clear.time

    スケジューラーやパフォーマーの再起動の回数に達する時間が、
    observer.restart.count.clear.time より長い場合、
    ステータスファイルをクリアし、スケジューラーやパフォーマーを監視します。
    短い場合、Pysilhouetteを停止します。
    単位は秒です。
    
    例) observer.restart.count.clear.time=300
    

    observer.check.interval

    スケジューラーやパフォーマーを監視する間隔を設定します。
    単位は秒です。
    
    例) observer.check.interval=5
    

    observer.status.path

    ステータスファイルのパスを設定します。
    スケジューラーやパフォーマーの停止を検知した回数を保持するために
    ステータスファイルを利用します。
    
    例) observer.status.path=/var/opt/pysilhouette/status
    

    performer.mkfifo.group.name(old observer.mkfifo.group.name)

    FIFOファイルのグループを設定します。
    
    例) performer.mkfifo.group.name=pysilhouette
    

    performer.mkfifo.stop.code(old observer.mkfifo.stop.code)

    FIFOにperformer.mkfifo.stop.codeが書き込まれた時、
    パフォーマーは停止します。
    
    例) performer.mkfifo.stop.code=2
    

    performer.mkfifo.ignore.code(old observer.mkfifo.ignore.code)

    FIFOにperformer.mkfifo.ignore.codeが書き込まれた時、
    パフォーマーはJOBの実行を遅延します。
    
    例) performer.mkfifo.ignore.code=1
    

    performer.mkfifo.path(old observer.mkfifo.path)

    FIFOのパスを設定します。
    スケジューラーとパフォーマーが同期をとるためにFIFOを利用します。
    
    例) performer.mkfifo.path=/tmp/pysilhouette.fifo
    

    performer.mkfifo.start.code(old observer.mkfifo.start.code)

    FIFOにperformer.mkfifo.start.codeが書き込まれた時、
    パフォーマーはJOBを実行します。
    
    例) performer.mkfifo.start.code=0
    

    performer.mkfifo.user.name(old observer.mkfifo.user.name)

    FIFOファイルのオーナーを設定します。
    
    例) performer.mkfifo.user.name=pysilhouette
    

    performer.mkfifo.perms(old observer.mkfifo.perms)

    FIFOファイルの権限を指定します。
    
    例) performer.mkfifo.perms=0666
    

    asynperformer.mkfifo.group.name(old observer.mkfifo.group.name)

    FIFOファイルのグループを設定します。
    
    例) asynperformer.mkfifo.group.name=pysilhouette
    

    asynperformer.mkfifo.stop.code(old observer.mkfifo.stop.code)

    FIFOにasynperformer.mkfifo.stop.codeが書き込まれた時、
    パフォーマーは停止します。
    
    例) asynperformer.mkfifo.stop.code=2
    

    asynperformer.mkfifo.ignore.code(old observer.mkfifo.ignore.code)

    FIFOにasynperformer.mkfifo.ignore.codeが書き込まれた時、
    パフォーマーはJOBの実行を遅延します。
    
    例) asynperformer.mkfifo.ignore.code=1
    

    asynperformer.mkfifo.path(old observer.mkfifo.path)

    FIFOのパスを設定します。
    スケジューラーとパフォーマーが同期をとるためにFIFOを利用します。
    
    例) asynperformer.mkfifo.path=/tmp/pysilhouette.fifo
    

    asynperformer.mkfifo.start.code(old observer.mkfifo.start.code)

    FIFOにasynperformer.mkfifo.start.codeが書き込まれた時、
    パフォーマーはJOBを実行します。
    
    例) asynperformer.mkfifo.start.code=0
    

    asynperformer.mkfifo.user.name(old observer.mkfifo.user.name)

    FIFOファイルのオーナーを設定します。
    
    例) asynperformer.mkfifo.user.name=pysilhouette
    

    asynperformer.mkfifo.perms(old observer.mkfifo.perms)

    FIFOファイルの権限を指定します。
    
    例) asynperformer.mkfifo.perms=0666
    

    asynscheduler.interval

    並列処理スケジューラーがFIFOにコードを書き込む間隔を設定します。
    単位は秒です。
            
    例) asynscheduler.interval=10
            

    job.popen.output.limit

    ジョブで実行されたコマンドの標準出力/標準エラーを、データベースに保存する限界サイズ
            
    例) job.popen.output.limit=1048576
            

    asynperformer.thread.pool.size

    並列処理可能なスレッドプール数を設定します。
            
    例) asynperformer.thread.pool.size=5
            

    scheduler.interval

    逐次処理スケジューラーがFIFOにコードを書き込む間隔を設定します。
    単位は秒です。
    
    例) scheduler.interval=10
    

    job.popen.env.lang

    ジョブを実行するときのLANGを設定します。
    
    例) job.popen.env.lang=C
    

    job.popen.timeout

    ジョブを実行するときのタイムアウトを設定します。
    ジョブの実行時間がタイムアウトを超えると、
    ジョブが終了します。
    単位は秒です。
    
    例) job.popen.timeout=3600
    

    job.popen.waittime

    ジョブのタイムアウトをチェックする間隔を設定します。
    単位は秒です。
    
    例) job.popen.waittime=10
    

    job.whitelist.flag

    ホワイトリスト機能を利用するかを設定します。
    1=有効
    0=無効
    
    例) job.whitelist.flag=1
    

    job.whitelist.path

    ホワイトリストのファイルパスを設定します。
    
    例) job.whitelist.path=/etc/opt/pysilhouette/whitelist.conf
    

    database.url

    Pysilhouetteで利用するデータベースのバインドを設定します。
    RFC-1738で定義されているスタイルで設定してください。
    さらに詳しい設定についてはSQLAlchemyのサポートデータベース を参照してください。
    
    MySQL
    mysql://localhost/<データベース名>
    mysql://<ユーザ名>:<パスワード>@<ホスト名>/<データベース名>
    mysql://<ユーザ名>:<パスワード>@<ホスト名>:<ポート番号>/<データベース名>
    PostgreSQL
    postgres://<ユーザ名>:<パスワード>@<ホスト名>:<ポート番号>/<データベース名>
    SQLite※Karesansuiの実行権限で読み取り・書き込み可能である必要があります。
    sqlite:////<絶対パス>/<ファイル名>-絶対パスで定義
    sqlite:///<相対パス>/<ファイル名>-相対パスで定義
    例) database.url=sqlite:////var/opt/pysilhouette/pysilhouette.db
    

    database.pool.status

    コネクションプールの利用可否を設定します。
    0=利用しない
    1=利用する
    ※SQLiteではコネクションプールの設定は利用できません。設定は無視されます。
    
    例)database.pool.status=0
    

    database.pool.max.overflow

    コネクションプールの最大数を設定します。
    
    例)database.pool.max.overflow=10
    

    database.pool.size

    通常時のコネクションプール数を設定します。
    
    例)database.pool.size=1