説明

ColdFusion スケジューリングエンジンへのプログラムインターフェイスを提供します。ページ出力をスタティックな HTML ページに書き出すオプションとともに、スケジューリングした間隔で CFML ページを実行できます。この機能を利用すると、データベーストランザクションが実行されてページにデータが挿入されるのを待つことなく、レポートなどのデータをパブリッシュするページをスケジューリングすることができます。

ColdFusion では、タスクのイベントハンドラーメソッドの呼び出し時に、Application.cfc のメソッドは呼び出されません。

注意:

requestTimeOut 属性は削除されました。

カテゴリ

シンタックス

<cfschedule 
action = "run|update|pause|resume|delete|pauseall|resumeall|list" 
task = "task name" 
endDate = "date" 
endTime = "time" 
file = "filename" 
interval = "seconds" 
operation = "HTTPRequest" 
password = "password" 
path = "path to file" 
port = "port number" 
proxyPassword = "password" 
proxyPort = "port number" 
proxyServer = "host name" 
proxyUser = "user name" 
publish = "yes|no" 
resolveURL = "yes|no" 
isDaily = "yes|no" 
overwrite = "yes|no" 
startDate = "date" 
startTime = "time" 
url = "URL" 
username = "user name"> 
group="group1" 
oncomplete="how to handle exception" 
eventhandler="path_to_event_handler" 
onException="refire|pause|invokeHandler" 
cronTime="time" 
repeat="number" 
priority="integer" 
exclude="date|date_range|comma-separated_dates" 
onMisfire = "" 
cluster="yes|no 
mode="server|application" 
retryCount="number" 

OR 
<cfschedule 
action = "delete" 
task = "task name"> 

OR 

<cfschedule 
action = "run" 
task = "task name"> 

OR 

<cfschedule
action = "pauseAll"
group=groupname
> 

OR

<cfschedule
action = "pauseAll"
> 

OR

<cfschedule
action = "resumeAll"
mode = "server|application"
> 

OR

<cfschedule
action = "resumeAll"
group=groupname
> 

OR

<cfschedule
action = "resumeAll"
> 


OR 

<cfschedule 
action = "list" 
mode = "server|application" 
result = "res">

注意:

このタグの属性は attributeCollection 属性で指定でき、その値は構造体になります。attributeCollection 属性で構造体の名前を指定し、タグの属性名を構造体のキーとして使用します。

関連項目

履歴

ColdFusion(2018 リリース):属性 requestimeout は削除されました。

また、2018 リリースでは、cfschedule action=pauseall と resumeall で group または mode が不要になりました。

以下に例を挙げます。

app1 から <cfschedule action="pauseall" を実行する場合、app1 のサーバータスクおよびアプリケーションタスクはすべて一時停止されます。

app2 のタスクについては、pauseall/resumeall は実行されません。

ただし、アプリケーションの境界はまだ存在します。app1 では app2 のタスクについて pauseall/resumeall は実行できず、その逆もまた同様です。

しかし、どのアプリケーションでも、すべてのサーバーレベルのタスクについて pauseall/resumeall を実行することができます。

ColdFusion 10:list、pauseall、resumeall の各アクションが追加されました。また、group、onComplete、eventHandler、onException、cronTime、repeat、result、priority、exclude、onMisfire、cluster、mode、isDaily、overwrite および retryCount の各属性が追加されました。

ColdFusion MX 6.1:間隔の計算方法が変更されました。日の長さに標準時と夏時間の切り替えが反映されるようになりました。月の長さは、4 週間ではなくカレンダーの月の長さになりました。スケジューラで閏年を正しく処理できるようになりました。

属性

 

属性

必須/オプション

デフォルト

説明

action

必須

 

  • delete:指定されたタスクを削除します。
  • update:既存のタスクを更新します。task 属性で指定された名前のタスクが存在しない場合は、タスクを作成します。
  • run:指定されたタスクを実行します。
  • pause:指定されたタスクを一時停止します。
  • resume:指定されたタスクの実行を再開します。
  • list:スケジューリングされているすべてのタスクをリスト出力します。
  • pauseAll:スケジューリングされているすべてのタスクを一時停止します。
  • resumeAll:スケジューリングされている、特定のアプリケーションのすべてのタスクを再開します。

task

必須

 

タスクの名前です。

endDate

オプション

 

スケジューリングしたタスクが終了する日付です。デフォルトの日付形式は mm/dd/yy です。

endTime

オプション

 

スケジューリングされているタスクの終了時刻(秒数)

ファイル

publish = "Yes" の場合は必須

 

スケジューリングしたタスクのパブリッシュされた出力を保管するファイルの名前です。デフォルトでは、ファイルに使用できる拡張子は .txt または .log のみです。cfusion\lib\neo-cron .xml に拡張子を追加できます。

interval

 

 

タスクをスケジューリングする間隔です。

  • number of seconds(秒数)
  • once(1 回)
  • daily(日に 1 回)
  • weekly(週に 1 回)
  • monthly(月に 1 回)

operation

オプション

HTTPRequest

スケジューラが実行するオペレーションです。

overwrite true false の場合、タスクが実行されるたびに新しい出力ファイルが作成されます。true の場合、新しい出力ファイルは作成されずに、既存のファイルが上書きされます。  

password

オプション

 

URL が保護されている場合のパスワードです。

path

publish = "Yes" の場合は必須

 

パブリッシュされたファイルを入れるディレクトリへのパスです。

port

オプション

80

url パラメータで指定したサーバーで使用するポートです。resolveURL = "yes" の場合、ポート番号を指定する取得ドキュメントの URL が自動的に変換され、取得ドキュメント内のリンクは保持されます。url 属性のポート値が、この値よりも優先されます。

proxyPassword

オプション

 

プロキシサーバーに提供するパスワードです。

proxyPort

オプション

80

プロキシサーバー上で使用するポート番号です。

proxyServer

オプション

 

プロキシサーバーのホスト名または IP アドレスです。

proxyUser

オプション

 

プロキシサーバーに提供するユーザー名です。

公開

オプション

no

  • yes:結果をファイルに保存します。
  • no

requestTimeOut

オプション

 

(削除)デフォルトのタイムアウト時間を延長する場合に使用できます。

resolveURL

オプション

no

  • yes:出力ページ内のリンクを絶対参照に変換します。
  • no

result

list アクションの場合は必須    cfschedule が結果変数を返すクエリーの名前です。

startDate

 

 

スケジューリングしたタスクを最初に実行する日付です。デフォルトの日付形式は mm/dd/yy です。

startTime

 

 

スケジューリングしたタスクを実行する時刻です。

url

action = "update" の場合は必須

 

実行するページの URL です。

username

オプション

 

ユーザー名(URL が保護されている場合)。

高さ

オプション

default

スケジューリングしたタスクが属するグループです。

onComplete

オプション

invokeHandler

現在のタスクの完了後に実行するアクションです。スケジューリングしたタスクを連結する場合に使用します。詳しくは、「スケジューラーの使用」を参照してください。

eventHandler

オプション

 

タスクの実行中に各種イベントで呼び出される定義済みのメソッドが含まれる CFC ファイルです。CFC には、CFIDE.scheduler.ITaskEventHandler が実装されている必要があります。Web ルートに対する相対パスを指定することができます。例えば、schedulerdemo.eventhandler と指定します。または、ColdFusion マッピングを使用します。

コンテキスト引数はこれらのイベント処理メソッドに渡されます。構造体で次のキーを持っています。

  • Task
  • Mode
  • Group
  • ExceptionMessage(onError() にのみ渡されます)

ColdFusion の 2018 リリースでは、新しいキー fireInstanceID が次のメソッドに渡されます。

  • onTaskStart
  • onTaskEnd
  • execute
  • onError

fireInstanceId は現在実行されているタスクの一意な ID です。また、あるメソッドで生成された変数に別のメソッドからアクセスすることもできます。

onException

オプション

invokeHandler(eventHandler を指定している場合)

タスクでエラーが発生した場合にどうするかを指定します。指定しない場合、アクションは実行されません。オプションは次のとおりです。

  • refire:直ちにタスクの実行を試行します。
  • pause:タスクのそれ以上の実行を中止します。
  • invokeHandler:ユーザーによって定義されたイベントハンドラーの onError メソッドを呼び出します。

cronTime

オプション

 

タスクのスケジュール時刻を cron ジョブシンタックスで指定します。

repeat

オプション

-1

タスクを繰り返す回数です。

priority

オプション

5

優先度を示す整数です。

exclude

オプション

 

スケジュール期間から除外する日付また日付範囲のカンマ区切りリストです。

onMisfire

オプション

invokeHandler(eventHandler を指定している場合)

タスクが誤実行された場合にどうするかを指定します。指定しない場合、アクションは実行されません。オプションは次のとおりです。

  • fire_now:直ちにタスクの実行を試行します。
  • invokeHandler:ユーザーによって定義されたイベントハンドラーの onMisfire メソッドを呼び出します。

cluster

オプション

no

yes の場合は、タスクをクラスター設定で実行できます。

mode

オプション

server

タスクがサーバー固有であるか、またはアプリケーション固有であるかです。

retryCount

オプション

3

タスクが失敗した場合の再試行回数です。この値は、0 以上で 3 以下である必要があります。

注意:

ColdFusion では、タスクのイベントハンドラーメソッドの呼び出し時に、Application.cfc のメソッドは呼び出されません。

使用方法

ColdFusion のタスクをスケジューリングするには、このタグと ColdFusion Administrator の「スケジュールされたタスク」ページを使用します。このタグを使用して追加または変更したタスクは Administrator で表示できます。Administrator の「サンドボックス/リソースセキュリティ」ページで、このタグを無効にすることができます。このタグの成功または失敗のステータスは、cf_root/cfusion/logs ディレクトリ(または、ColdFusion Enterprise インスタンスマネージャで作成した別のインスタンスの logs ディレクトリ)にある schedule.log ファイルに書き込まれます。

タスクを作成するときに、実行する ColdFusion ページの URL、実行の日付、時刻、頻度、およびタスク出力を HTML ファイルにパブリッシュするかどうかを指定します。出力をパブリッシュする場合は、出力ファイルのパスとファイルを指定します。

毎日、指定された開始時間と終了時間(午後 12 時から 4 時までなど)および間隔(1 分ごとなど)で実行するようスケジュールされているタスクがある場合は、次の方法で Administrator からタスクを作成することができます。

ColdFusion Administrator で、サーバーの設定/スケジュールされたタスクをクリックし、新規タスクのスケジューリングをクリックします。

スケジュールされたタスク
スケジュールされたタスク

夜間に実行するタスクを作成する場合は、cron式を記述できます。例えば、毎月 1 日に、午後 6 時から午前 4 時までの間タスクを実行する必要がある場合は、次の式を使用します。

0 0 18-4 1 * ? *

開始時刻に過去の時刻を指定して、ジョブを 1 回実行するようにスケジュールした場合、そのタスクがまだ実行されていなければ、直ちに誤実行されます。

開始時刻に過去の時刻を指定して、繰り返し発生するジョブをスケジュールすると、ジョブは次に訪れる最も近い指定時刻に実行されます。スケジューラ設定ファイル(cf_root\lib\neo-cron.xml )には、スケジュールされたすべてのイベント(クラスタ化されたタスクは除く)が個別のエントリとして書き込まれます。

また、cfscheduleタグは、クエリ内の次の結果変数も返します。result 属性で指定した名前を接頭辞とするこれらの変数にアクセスできます。例えば、result 属性に myResult という名前を割り当てると、#myResult.status[2]# にアクセスすることで 2 番目に取得したタスクのステータスを取得できます。result 属性は、複数のページから同時に呼び出される可能性がある関数または CFC(あるいはこれら両方)について、一方の呼び出しの結果が他方の呼び出しの結果を上書きしないようにするための方法を提供します。

変数名 説明
result_name.chainedtask 連鎖タスクかどうかを示します
result_name.clustered タスクがクラスタモードで実行されているかどうかを示します
result_name.crontime タスクの cron 開始時刻を示します
result_name.enddate タスクの終了日を示します
result_name.endtime タスクの終了時刻を示します
result_name.eventhandler タスクに関連付けられているイベントハンドラーを示します
result_name.exclude タスクから除外されている日付または時刻の範囲を示します
result_name.file タスクのパブリッシュされた出力を保管するファイルの名前を示します
result_name.group タスクが属するグループを示します
result_name.interval タスクをスケジューリングする間隔を示します
result_name.lastfire 最後にタスクを実行した時刻を示します
result_name.mode タスクがサーバー固有かアプリケーション固有かを示します
result_name.oncomplete タスクが完了した後のアクションを示します連鎖タスクで使用します
result_name.onexception タスクがエラー終了したときのアクションを示します
result_name.onmisfire タスクが誤実行されたときのアクションを示します
result_name.overwrite タスクを実行するたびに出力ファイルを上書きするかどうかを示します
result_name.path タスク出力が保管されるパブリッシュ済みファイルの場所を示します
result_name.priority タスクの優先順位を示します
result_name.proxyport プロキシサーバーのポート番号を示します
result_name.proxyserver プロキシサーバーのホスト名または IP アドレスを示します
result_name.proxyuser プロキシサーバーに提供されるユーザー名を示します
result_name.publish タスクの結果をファイルに保存するかどうかを示します
result_name.remainingcount タスクの未実行の回数を示します
result_name.repeat タスクの繰り返し回数を示します
result_name.resolveurl タスクの結果ページのリンクを絶対参照にするかどうかを示します
result_name.retrycount タスクの試行回数を示します
result_name.startdate タスクが最初にスケジュールされた日付を示します
result_name.starttime タスクの実行がスケジュールされている時刻を示します
result_name.status タスクのステータスを示します
result_name.task タスクの名前を示します
result_name.timeout タスクのタイムアウト時間を秒単位で示します
result_name.url 実行されたページの URL を示します
result_name.username ユーザー名を示します(ページの URL が保護されている場合)

例 1

<!--- This read-only example schedules a task. 
To run the example, remove the comments around the code 
and change the startDate, startTime, url, file, and path attributes 
to appropriate values. ---> 
<cfschedule action = "update" 
task = "TaskName" 
operation = "HTTPRequest" 
url = "http://127.0.0.1/playpen/history.cfm" 
startDate = "8/17/09" 
startTime = "12:25 PM" 
interval = "3600" 
resolveURL = "Yes" 
publish = "Yes" 
file = "sample.html" 
path = "c:\inetpub\wwwroot\playpen" 
> 

例 2

handler.cfc

component implements="cfide.scheduler.ITaskEventHandler"
{
	public boolean function onTaskStart(Struct context){
		myvar="onTaskStart";
		cffile (action="append", file="#Expandpath('./')#log.txt", output="fireInstancedId:#context.fireinstanceID#, myvar: #myvar#<br>");
		return true;
		}
	public void  function Execute(Struct context){
		myvar= myvar & "Execute";
		cffile (action="append", file="#Expandpath('./')#log.txt", output="fireInstancedId:#context.fireinstanceID#, myvar: #myvar#<br>");
		}
	public void function onTaskEnd(Struct context){
		myvar=myvar & "onMisfire";
		cffile (action="append", file="#Expandpath('./')#log.txt", output="fireInstancedId:#context.fireinstanceID#, myvar: #myvar#<br>");
	}
	public void function onMisfire(Struct context){
		//FireInstance-Id would not be passed to onMisfire
	}
	public void function onError( Struct context){
		myvar= myvar & "onError";
		cffile (action="append", file="#Expandpath('./')#log.txt", output="fireInstancedId:#context.fireinstanceID#,myvar: #myvar#<br>");
      
	}
}

index.cfm

<!--- Creating Task --->
<cfschedule action="update" 
			task="fireInstanceEx"
			eventhandler="schedulerTest.handler"
			interval="once">
		
Reading log files<br/>
<cfset sleep(18000)>
<cffile action="read" file="#Expandpath('./')#log.txt" variable="res" >
		<cfoutput>#res#</cfoutput>
		

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー