cfschedule

注意:

このタグは、CFFiddle ではサポートされていません。

説明

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

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

カテゴリ

シンタックス

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

または 

<cfschedule
action=&quot;create&quot;
task = &quot;task name&quot;> 

または 

<cfschedule 
action = &quot;modify&quot; 
task = &quot;task name&quot;> 

または 

<cfschedule 
action = &quot;delete&quot; 
task = &quot;task name&quot;> 

または 

<cfschedule 
action = &quot;run&quot; 
task = &quot;task name&quot;> 

または 

<cfschedule
action = &quot;pauseAll&quot;
group=groupname> 

または 

<cfschedule
action = &quot;pauseAll&quot;> 

または 

<cfschedule
action = &quot;resumeAll&quot;
mode = &quot;server|application&quot;> 

または 

<cfschedule
action = &quot;resumeAll&quot;
group=groupname> 

または 

<cfschedule
action = &quot;resumeAll&quot;> 

または 

<cfschedule 
action = &quot;list&quot; 
mode = &quot;server|application&quot; 
result = &quot;res&quot;>
注意:

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

関連項目

履歴

ColdFusion(2018 リリース)アップデート 2:create および modify アクションが導入されました。

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

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

以下に例を挙げます。

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

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

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

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

さらに、fire_now 属性の名前が、ColdFusion の 2018 リリースでは firenow に変更されました。

ColdFusion(2016 リリース)アップデート 8: アンダースコアを含んだ次の列が出力から削除されます。

  • LAST_FIRE
  • CHAINED_TASK
  • REMAINING_COUNT
  • RESOLVE_URL
  • RETRY_COUNT
  • PROXY_SERVER
  • PROXY_PORT
  • PROXY_USER

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 週間ではなくカレンダーの月の長さになりました。スケジューラで閏年を正しく処理できるようになりました。

注意:

ColdFusion Administrator でドライバーとしてその他を使用して登録されたデータベースを使用している場合は、<cfinstance>/lib/quartz にある quartz_cluster.properties ファイルに次の 2 つのプロパティを追加する必要があります。

  1. org.quartz.dataSource.<datasourcename>.connectionProvider.class=coldfusion.scheduling.ConnectionProviderImpl
  2. org.quartz.jobStore.dataSource=<datasourcename>

<datasourcename> は、ColdFusion Administrator で登録されたデータソースの名前に置き換えます。

また、データソースを ColdFusion に登録する際は、ドライバー名を必ず MySQL/Microsoft SQL Server/Oracleその他のどちらかにしてください。

属性

注意:

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

<! --- この読み取り専用サンプルではタスクをスケジュールしています。この例を実行するには、コードを囲むコメントを削除し、startDate、startTime、url、file、path の各属性を適切な値に変更します。---> 
<cfschedule action = &quot;update&quot; 
task = &quot;TaskName&quot; 
operation = &quot;HTTPRequest&quot; 
url = &quot;http://127.0.0.1/playpen/history.cfm&quot; 
startDate = &quot;8/17/09&quot; 
startTime = &quot;12:25 PM&quot; 
interval = &quot;3600&quot; 
resolveURL = &quot;Yes&quot; 
publish = &quot;Yes&quot; 
file = &quot;sample.html&quot; 
path = &quot;c:\inetpub\wwwroot\playpen&quot; 
> 

例 2

handler.cfc

component implements=&quot;cfide.scheduler.ITaskEventHandler&quot;
{
 public boolean function onTaskStart(Struct context){
  myvar=&quot;onTaskStart&quot;;
  cffile (action=&quot;append&quot;, file=&quot;#Expandpath('./')#log.txt&quot;, output=&quot;fireInstancedId:#context.fireinstanceID#, myvar: #myvar#<br>&quot;);
  return true;
  }
 public void  function Execute(Struct context){
  myvar= myvar & &quot;Execute&quot;;
  cffile (action=&quot;append&quot;, file=&quot;#Expandpath('./')#log.txt&quot;, output=&quot;fireInstancedId:#context.fireinstanceID#, myvar: #myvar#<br>&quot;);
  }
 public void function onTaskEnd(Struct context){
  myvar=myvar & &quot;onMisfire&quot;;
  cffile (action=&quot;append&quot;, file=&quot;#Expandpath('./')#log.txt&quot;, output=&quot;fireInstancedId:#context.fireinstanceID#, myvar: #myvar#<br>&quot;);
 }
 public void function onMisfire(Struct context){
  // FireInstance-Id は onMisfire には渡されない
 }
 public void function onError( Struct context){
  myvar= myvar & &quot;onError&quot;;
  cffile (action=&quot;append&quot;, file=&quot;#Expandpath('./')#log.txt&quot;, output=&quot;fireInstancedId:#context.fireinstanceID#,myvar: #myvar#<br>&quot;);
      
 }
}

index.cfm

<! --- タスクの作成 --->
<cfschedule action=&quot;update&quot; 
   task=&quot;fireInstanceEx&quot;
   eventhandler=&quot;schedulerTest.handler&quot;
   interval=&quot;once&quot;>
  
ログファイルの読み取り<br/>
<cfset sleep(18000)>
<cffile action=&quot;read&quot; file=&quot;#Expandpath('./')#log.txt&quot; variable=&quot;res&quot; >
  <cfoutput>#res#</cfoutput>
  

例 3

<cfscript>

     cfschedule (action=&quot;create&quot;, task=&quot;myTask&quot;, group=&quot;bugTesting&quot; ,mode=&quot;Server&quot;, url=&quot;http://google.com&quot;, startDate=&quot;24/12/2017&quot;, startTime=&quot;12:00 AM&quot;, interval =&quot;daily&quot;)
 cfschedule(action=&quot;modify&quot;, task=&quot;myTask&quot;,group=&quot;bugTesting&quot; ,interval=&quot;3600&quot;,startDate=&quot;25/12/2017&quot;, startTime=&quot;1:00 AM&quot;, publish=&quot;yes&quot;,path=&quot;#ExpandPath('./')#&quot;,file=&quot;task.log&quot;)
 
 cfschedule(action=&quot;list&quot;,task=&quot;myTask1&quot;,group=&quot;bugTesting&quot;,result=&quot;taskQuery&quot;)
writeoutput (&quot;Name:&quot; & #taskQuery.task# & &quot; Group:&quot; & #taskQuery.task# & &quot; mode:&quot; & #taskQuery.mode# & &quot; url:&quot; & #taskQuery.Url# & &quot; startDate:&quot; & #taskQuery.startDate# & &quot; startTime:&quot; & #taskQuery.startTime# & &quot; interval:&quot; & #taskQuery.interval# & &quot; publish:&quot; & #taskQuery.publish# & &quot; file:&quot; & #taskQuery.file# & &quot;<br>&quot;);

</cfscript>

 Adobe

ヘルプをすばやく簡単に入手

新規ユーザーの場合

Adobe MAX 2024

Adobe MAX
クリエイティブカンファレンス

10 月 14 日~ 16 日 マイアミビーチおよびオンライン

Adobe MAX

クリエイティブカンファレンス

10 月 14 日~ 16 日 マイアミビーチおよびオンライン

Adobe MAX 2024

Adobe MAX
クリエイティブカンファレンス

10 月 14 日~ 16 日 マイアミビーチおよびオンライン

Adobe MAX

クリエイティブカンファレンス

10 月 14 日~ 16 日 マイアミビーチおよびオンライン