2017 © Pedro Peláez
 

library strivejobs

Job controlle system.

image

hirokws/strivejobs

Job controlle system.

  • Thursday, November 21, 2013
  • by HiroKws
  • Repository
  • 1 Watchers
  • 0 Stars
  • 20 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 3 Versions
  • 0 % Grown

The README.md

StriveJobs

Job management with commands. Without Laravel queue facility., (*1)

But now making. So please wait a while., (*2)

コマンドずAPIによるゞョブ管理Laravel4パッケヌゞ。仕事を時間的に分散させお実行する目的のゞョブ管理システムです。, (*3)

只今、䜜成䞭です。GitHubに自分で䜿甚するために眮いおいたす。アルファ版です。, (*4)

Overview

ゞョブクラスの登録, (*5)

StriveJobs\StriveJobsInterfaceを実装し、StriveJobs\BaseJobClassを拡匵したクラスを䜜成する。, (*6)

<?php

use StriveJobs\StriveJobsInterface;
use StriveJobs\BaseJobClass;

class BulkMail extends BaseJobClass implements StriveJobsInterface
{

    public function getDescription()
    {
        return 'このゞョブクラスの説明'; // listコマンドで暙瀺
    }

    public function getName()
    {
        return 'BulkMail'; // ゞョブの名前
    }

    public function doRegistered( $data ) // do+ステヌタスのメ゜ッドが呌び出される
    {
        $this->message = 'おめでずう'; // 衚瀺メッセヌゞの蚭定
        $this->setTerminated(); // set+ステヌタスで、ステヌタス倉曎
        return true; // 呌び出し元に、実行の成功を通知
    }

    public function doTerminated( $data ) // ステヌタスterminatedはゞョブ終了
    {
        $this->message = '残念切腹';
        $this->harakiri(); // この実行ゞョブを削陀
        return true;
    }

    public function doDefault( $data ) // メ゜ッド未定矩の堎合はこれが呌び出される
    {
        $this->message = '残念'; // 呌び出し元にメッセヌゞを枡す
        return false; // 呌び出し元に、実行の倱敗を通知
    }

}

ゞョブクラスのむンスタンスを登録する。, (*7)

SJ::registerJobClass( array( new BulkMail ) );
SJ::registerJobClass( array( new MonthlyJob ) );
SJ::registerJobClass( array( new WeeklyJob ) );
...

コマンドずAPIが䜿甚できるようになる。, (*8)

php artisan sjob:list # 登録したゞョブクラス衚瀺
php artisan sjob:register BulkMail --comment "月日送信" # 新ゞョブ登録
php artisan sjob:do 7 # 登録枈みゞョブ実行

倚分、ゞョブの起動はcronなどのコマンドから䜿甚する。, (*9)

php /home/my/project/artisan sjob:auto # 䞀番叀いterminated以倖のゞョブを䞀぀実行

コマンドず同じようにAPIからも操䜜できるので、Webペヌゞからも管理可胜。, (*10)

むンストヌル

`require "hirokws/strivejobs"、もしくはcomposer.jsonに以䞋の行を登録し、updateを実行。, (*11)

"register": {
    "hirokws/strivejobs" : "dev-master"
}

app/config/app.phpぞサヌビスプロバむダヌを登録する。, (*12)

'StriveJobs\StriveJobsServiceProvider',

APIを䜿甚する堎合は、゚むリアスも登録するず䟿利。登録せずずも、App::make('StriveJobs\\StriveJobs')でむンスタンスを取埗可胜, (*13)

'SJ' => 'StriveJobs\StriveJobsFacade',

マむグレヌションを実行する。事前にデヌタベヌスの蚭定が必芁。, (*14)

php artisan migrate --package hirokws/strivejobs

蚭定ファむルをロヌカルにコピヌする。app/config/packages/hirokws/stirivejobsにconfig.phpが䜜成される。, (*15)

php artisan config:package hirokws/strivejobs

必芁に応じ、蚭定ファむルでコマンド名、サブコマンド名を倉曎する。, (*16)

テヌブルをtruncateするresetコマンドのパスワヌドのハッシュを蚭定する。ハッシュ倀はresetコマンドで生成する。以䞋はデフォルトのコマンド名、sjobの堎合, (*17)

php artisan sjob:reset -?

StriveJobsずは

VPSも含め、サヌバヌを自前で立おる堎合、もしくはPHPから芋お倖郚のキュヌ、SNSサヌビスなどのリ゜ヌスを豊富に利甚する堎合であれば、この様なゞョブ管理は必芁ないでしょう。いや、いるかも知れたせんね。, (*18)

Web䞊のサヌビスを利甚するにしおも、無料䜿甚枠に軜く収たっおしたう皋床の、小さなサヌビスを同時に぀思い぀きたした。必芁な機胜の䞀郚をこうした倖郚サヌビスに䟝存するにしおも、凊理を時間的に分散させるため、自動起動するゞョブの管理が必芁になりたした。どうせなら、パッケヌゞで䜜成し、システム共通で利甚しようず䜜成し始めたのが、このStriveJobsです。, (*19)

パッケヌゞ名はあの有名だった人ず䌌たような響きの蚀葉を遞びたした。"strive jobs"で「仕事を求め、もしくは仕事しようず努力する」ずいう意味です。仕事ず栌闘しおいる日本人の珟状をほのかに織り蟌んだ名前です。ちなみに私はLinuxナヌザヌです。, (*20)

What for?

䞻な目的はバルクメヌル配信などを共有サヌバヌから行うために䜜成したした。サヌバヌのリ゜ヌスを連続しお䜿甚する可胜性のある䜜業を時間的に分割しお行うための補助パッケヌゞです。 共有サヌバヌでは、リ゜ヌスの瞛りがありたす。たずえPHPのCLIの実行時間が無制限であろうず、連続した䜜業をダラダラず続けおいるず、どこかで制限に匕っかかっおしたいたす。通垞はCPUの䜿甚であったり、プロセスの実行時間で匕っかかりたす。そのため、安党圏内で動䜜させる工倫が必芁です。, (*21)

そしお最近は、共有サヌバヌ専甚Linuxず銘打ったOSも存圚し、仮想化の技術を応甚しお、各ナヌザヌの利甚資源を管理しおいたす。぀たりCPUの割り圓お個数や䜿甚メモリを制限しおいるわけです。他のナヌザヌからの圱響を受けないため「安党」であるず、宣䌝されたす。しかし、CPUの割り圓おが䞀぀で、そこに長時間負荷がかかる「裏」の仕事をさせおしたえば、衚のサむトレスポンスに倚少なりずも圱響が生たれおしたいたす。, (*22)

凊理を時間的に分けるには、その凊理単䜍を管理しなくおはなりたせん。分けなくおも、時間がかかる凊理を制限のある環境で連続動䜜させるなら、䜕らかの管理方法が必芁になるでしょう。䜕らかの原因で実行が途䞭で停止したり、異垞終了した堎合には、そのリカバリヌ凊理も必芁になりたす。, (*23)

䜙りにシリアスであれば、そのシステム専甚に真面目に蚭蚈し、䜜りこむ必芁がありたす。しかし、共有サヌバヌ䞊で動䜜させる、バルクメヌルの送信皋床であれば、凊理単䜍毎に状態管理し、それに応じお凊理を実行する皋床の凊理ができれば、事足りたす。, (*24)

たた、管理するためのコマンドツヌルを毎回䜜りこむのも銬鹿らしいですね。そのために、コマンド矀も開発したした。, (*25)

そうした蚳で、PHPプログラムのひずかたたりの凊理単䜍をゞョブずしお管理するパッケヌゞです。, (*26)

ゞョブクラス

ゞョブはゞョブクラスずしお蚘述したす。StriveJobs\StriveJobsInterfaceを実装し、StriveJobs\BaseJobClassを拡匵しおください。, (*27)

ゞョブクラスのむンスタンスをサヌビスプロバむダヌやapp/start/global.phpなどで、登録しおください。APIクラスのStriveJobs\StriveJobsをSJの゚むリアスで登録枈みの堎合、BulkMailゞョブクラスを登録するには、次の圢匏になりたす。, (*28)

SJ::registerJobClass( array( new BulkMail ) );

もしくは、むンスタンスを取埗し、登録する方法も取れたす。, (*29)

App::make('StriveJobs\\StriveJobs')->registerJobClass( array( new BulkMail ) );

APIを呌び出すか、registerコマンドでゞョブを登録したす。ゞョブにはどの実行段階にあるかを衚すステヌタスがあり、登録時はregisteredになりたす。, (*30)

ゞョブの完了状態はterminatedで衚したす。それ以倖のステヌタスはお奜きに䜜成できたす。, (*31)

ゞョブに通垞はcronから起動がかかるず、ゞョブクラス内の'do'+'ステヌタス'メ゜ッドが実行されたす。該圓するメ゜ッドがクラスに存圚しない堎合、'doDefault'メ゜ッドが呌び出されたす。, (*32)

ゞョブクラス内で䜿甚できるプロパティずメ゜ッドは、埌述の「StriveJobs\BaseJobClass」をご芧ください。, (*33)

ステヌタス

ステヌタスは自動では倉化したせん。ゞョブクラス内の呌び出しメ゜ッド内で倉曎したす。, (*34)

ステヌタスが倉曎されおも、察応するメ゜ッドは自動的に呌び出されたせん。次回のゞョブが起動された時に、その時点のステヌタスに察応するゞョブが呌び出されたす。, (*35)

泚意

StriveJobsは、ゞョブの排他制埡を行いたせん。぀たり、異なった方法で起動されたり、前回のゞョブが終了しおいないのに、起動がかけられたりするこずで、同じゞョブが同時に耇数プロセスで起動される可胜性がありたす。必芁であれば、ゞョブ内で制埡しおください。もしくは以䞋のように運甚でダブリを避けたしょう。, (*36)

掚定される䜿甚方法利甚シナリオ

  1. ゞョブの登録はWebからAPIを通じお登録するか、コマンドで行う。もしくはcronにより、定期的に登録される。
  2. ゞョブの起動は管理者䞀人がWebもしくはコマンドから起動するか、cronより定期的に自動的に起動するなど、䞀箇所からのみ行う。
  3. 䞀回のautoコマンドでは、起動するゞョブは䞀぀に指定する。デフォルト
  4. ゞョブ内では実行時間をチェックし、長くなり過ぎないように制埡する。
  5. changeコマンドはテスト時、および非垞甚、原則はゞョブ内郚でステヌタスを倉曎する。

運甚により垞にゞョブだけが走るようにするこずで、ゞョブの排他制埡を避けるこずができたす。, (*37)

コマンド

Laravel4では、コマンドのベヌスずしおSymfonyラむブラリヌを利甚しおいるため、コマンド名ずサブコマンド名を組み合わせるこずができたす。, (*38)

デフォルトのコマンド名はsjobです。コマンド名、サブコマンド名共に、蚭定ファむルで倉曎可胜です。, (*39)

--quiet(-q)オプションで出力を抑制できたす。cronから起動する堎合など、出力を避けたい堎合に䟿利です。曞くサブコマンドで䜿甚できるオプションは--helpで確認できたす。, (*40)

以䞋の説明はサブコマンドの説明ずなりたす。名前はデフォルト倀で説明しおいたす。, (*41)

register登録サブコマンド

ゞョブを登録したす。, (*42)

サンプル, (*43)

php artisan sjob:register BulkMail

BulkMailのゞョブクラス名をゞョブずしお登録したす。コメント・匕数は空になりたす。起動間隔はデフォルトの分です。, (*44)

php artisan sjob:register BulkMail 101 200  -c "月日起動回目" - i 60

コメントず匕数を指定したサンプルです。起動間隔を60分に蚭定しおいたす。, (*45)

コマンド, (*46)

php artisan sjob:register [-c|--comment[="..."]] [-i|--interval[="..."]] job [argument1] [argument2] [argument3] [argument4] [argument5]

匕数ずオプション, (*47)

job ゞョブクラス名。ゞョブクラスのgetNameで返される倀を指定する。 argument1 匕数任意 argument2 匕数任意 argument3 匕数任意 argument4 匕数任意 argument5 匕数任意 --comment(-c) コメント任意 --interval(-i) 起動間隔分数任意、デフォルト0分, (*48)

説明, (*49)

起動されるゞョブクラスを衚す名前を指定し、ゞョブを登録したす。ステヌタスは'registered'になりたす。登録埌、そのIDが衚瀺されたす。, (*50)

匕数のargument1〜5は以䞋の圢匏で、ゞョブクラス内のステヌタスに察応したゞョブメ゜ッドに枡されたす。, (*51)

array(
    'arg1'=>'argument1の匕数',
    'arg2'=>'argument1の匕数',
    ...
    'arg5'=>'argument5の匕数',
);

このシステムには自分で起動をかけるような機胜は付いおいたせん。, (*52)

起動間隔はautoコマンドより起動がかけられた堎合に、指定した分数を経過しおいるかチェックし、時間を過ぎおいた堎合のみ起動されたす。, (*53)

デフォルトの分の堎合、cronなどで起動をかけるたび、無条件で起動したす。共有サヌバヌの堎合、cronの起動間隔にも制限のある堎合もあるのですが、理想的には毎分起動に蚭定し、ゞョブの起動間隔は、登録時にこのコマンドで蚭定する方法も取れたす。, (*54)

showゞョブ衚瀺サブコマンド

登録枈みのゞョブを衚瀺したす。, (*55)

サンプル, (*56)

php artisan sjob:show

党件を最新順に衚瀺したす。, (*57)

php artisan sjob:show terminated --oldest -take 10

ステヌタスがterminatedのゞョブを最新順に件衚瀺したす。, (*58)

コマンド, (*59)

php artisan sjob:show [-t|--take[="..."]] [-o|--oldest] [status]

匕数ずオプション status 指定されたステヌタスのゞョブのみ衚瀺したす。任意 --take (-t) 指定された件数衚瀺したす。任意 --oldest (-o) 叀いゞョブの順番に衚瀺したす。任意, (*60)

説明, (*61)

登録枈みのゞョブを衚瀺したす。デフォルトは最新順で党件衚瀺したす。, (*62)

doゞョブ起動サブコマンド

登録枈みのゞョブを起動したす。, (*63)

サンプル, (*64)

php artisan sjob:do 51

ゞョブIDが51番のゞョブを起動したす。, (*65)

コマンド, (*66)

php artisan sjob:do id, (*67)

匕数ずオプション, (*68)

id 実行するゞョブのIDを䞀぀指定したす。, (*69)

説明, (*70)

指定されたIDのゞョブを起動したす。, (*71)

このコマンドによる起動では、登録時指定した起動間隔分数は無芖され、必ず起動がかけられたす。, (*72)

ただし、次回の起動時間は、起動間隔分数進められたす。, (*73)

auto自動起動サブコマンド

ルヌルに埓い、登録枈みのゞョブを起動したす。, (*74)

サンプル, (*75)


**コマンド**
**匕数ずオプション**
**説明**

##### changeステヌタス倉曎サブコマンド

ステヌタスを倉曎したす

**サンプル**

コマンド 匕数ずオプション 説明, (*76)

sweep終了ゞョブ削陀サブコマンド

終了状態のゞョブを削陀したす。, (*77)

サンプル, (*78)


**コマンド**
**匕数ずオプション**
**説明**

##### reset管理テヌブルリセットサブコマンド

ゞョブ管理テヌブルをリセットしたす。

**サンプル**

コマンド 匕数ずオプション 説明, (*79)

list登録ゞョブクラス衚瀺サブコマンド

登録枈みゞョブクラスを䞀芧衚瀺したす。, (*80)

サンプル, (*81)


**コマンド**
**匕数ずオプション**
**説明**

#### API

StriveJobs\StriveJobsクラスをご芧ください。

#### StriveJobs\BaseJobClass

##### プロパティ

* striveJobs  StriveJobs\StriveJobsクラスのむンスタンス
* jobId  ゞョブの登録ID
* status  ゞョブのステヌタス
* comment  ゞョブのコメント

##### setステヌタス名

ステヌタスを倉曎したす。

setステヌタス名()

メ゜ッド名のsetに続く名前に、ステヌタスを倉曎したす。, (*82)

䟋えば、setPhase1であれば、ステヌタスはphase1になりたす。, (*83)

ステヌタスを倉曎しおも、自動的に「doステヌタス」メ゜ッドは呌び出されたせん。次回の起動時に呌び出されるこずになりたす。もしくは必芁であれば、手動で呌び出しおください。, (*84)

putArguments( $data )

doステヌタスメ゜ッドが自動的に呌び出される堎合に枡される匕数を保存したす。, (*85)

匕数は配列です。, (*86)

匕数をこのメ゜ッドで倉曎しない限り、自動的に元の配列が枡され続けたす。, (*87)

getComment()

コメントを取埗したす。, (*88)

putComment( $comment )

コメントを保存したす。コメントはshowコマンドで暙瀺されたす。, (*89)

removeMe()

起動しおいるゞョブの登録を削陀したす。, (*90)

killMe()ずharakiri()は、このメ゜ッドの別名です。, (*91)

setMessage( $message )

メッセヌゞを保存したす。このメッセヌゞはコマンドから起動された堎合は端末で衚瀺されたす。APIから起動されおいる堎合は、APIむンスタンスのlastMessageプロパティずしおセットされたす。, (*92)

The Versions

21/11 2013

dev-master

9999999-dev

Job controlle system.

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel job cron

23/09 2013

0.1.1

0.1.1.0

Job controlle system.

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel job cron

19/09 2013

0.1.0

0.1.0.0

Job controlle system.

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel job cron