バッチやスケジューラー、または、Windows Update などでOSの再起動時にColdFusion Application Server サービスの起動に失敗する場合があります。ここでは、発生頻度から、大きく2つの原因について解説します。(この問題は、ColdFusion 2016 や 11 でも同様に発生します)
OSの起動時は様々なサービスが起動します。例えば、Windows Updateの適用直後の再起動時(更新プログラムを構成している)や、他のソフトウェア(ウイルス対策ソフトの定義ファイルの更新等)処理、他のサービスの起動に時間が取られ、ColdFusionの起動が完了するまでに多くの時間がかかった際に、ColdFusionのサービス起動がタイムアウトする場合があります。
ColdFusion の Application Serverサービスの起動のタイムアウト時間は初期設定で240秒です。この時間内にサービス起動を完了しなかった場合、タイムアウトが発生してColdFusionの起動を中断して終了します。その時、Windowsのイベントログのアプリケーションログに ID 261 と 263 が出力されます。
【参考】
https://www.samuraiz.co.jp/coldfusion/upgrade/img/ColdFusion_migration_2018_19.pdf
P.67
- Windows OS の起動時に ColdFusion Application Server サービスが起動しない場合
この対策としては、サービス起動のタイムアウト時間を延ばすという方法を行ってください。例えば、以下のコマンドにてタイムアウト時間を600秒に設定することができます。
coldfusionsvc.exe -starttimeout 600 "ColdFusion 2018 Application Server"
※2016の場合は、ColdFusion 2016 Application Serverです。実際に登録されているサービス名を確認してください。
coldfusionsvc.exe は [cf_root]\cfusion\bin フォルダーにあります。また、このコマンドの実行には管理者権限が必要となります。この設定を行っても引き続きタイムアウトエラーが出る場合は、さらに時間を変更してください。
※他にもサービスの設定で「ColdFusion 2018 Application Server」の「スタートアップの種類」を「自動(遅延開始)」に設定することでも問題が解消できる可能性がございます。遅延開始に設定すると、Windowsの起動から2分程度経ってからサービスが起動されます。
バッチやタスクでColdFusion のサービス再起動を行っている環境(例えば、日次の OS スケジュールタスク)で、以下のようにサービスを操作する net コマンドを使用して再起動を行っていると、サービス起動が失敗する場合があります。
バッチ起動
(バッチ内)停止コマンド実行: net stop "ColdFusion 2018 Application Server"
(バッチ内)起動コマンド実行: net start "ColdFusion 2018 Application Server"
バッチ終了
①でOSの起動時などの問題は紹介していますが、バッチやタスクによるサービスの操作を行う際は、サービスの停止時にもタイムアウトを起こしてしまう可能性について考慮が必要です。
バッチやタスクを実行したタイミングで、ColdFusionの負荷が高かった場合、または他の要因でOS や CPU、メモリの負荷が高かった場合、サービスの停止処理(ColdFusion の終了処理)自体に時間がかかってしまい、サービスの停止がタイムアウトを起してしまいます。
この時、net stop コマンドの実行がタイムアウトで終了しても ColdFusion 自体の停止はまだ完了してしていないという状態になります。上記のバッチのプログラムは、net stop の後に net start を行っています。まだ、ColdFusionが停止しきっていないのに、サービスの停止がタイムアウトしたため、その後、即時に net start による ColdFusion サービスの起動が行われます。そうすると、ColdFusionを二重起動しようとすることになってしまい、net start によるサービス起動がエラーとなり、結果的にColdFusionが起動できないことになります。その時、Windowsのイベントログのアプリケーションログに ID 257 や 263 が出力されます。
この問題を防止するには、先ほどと同様、サービス停止のタイムアウト時間も変更する方法があります。やはり、管理者権限でコマンドプロンプトを開き、[cf_root]\cfusion\bin フォルダ内で以下を実行します
coldfusionsvc.exe -stoptimeout 600 "ColdFusion 2018 Application Server"
もしくは、停止から起動までの間に OS のスリープコマンドなどで十分に時間を取るか、バッチ内で coldfusion.exe が終了したことを確認する条件ループを行い、起動コマンドを実行するようにする方法などがあります。他に、プロセスを監視する何らかの死活監視ソフトウェアを利用して、バッチには停止コマンドのみを設定し、coldfusion.exe のプロセスが消えたことを確認してから起動コマンドを実行させる方法なども検討下さい。
記事公開日:2020年07月03日
最終更新日:2020年07月03日
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent suscipit iaculis libero sed tristique. Quisque mollis dolor non tellus placerat vitae sodales lectus porta. Curabitur ut suscipit tellus. Maecenas rhoncus, ante vitae vehicula vestibulum, metus sapien dapibus tellus, et mattis dolor neque vitae nisl. Nullam eleifend ultrices ipsum eget pretium. Curabitur semper metus ut ante adipiscing nec volutpat sem rutrum. Nullam a nisi lacus, non interdum ante. Vivamus ante augue, commodo vel egestas sed, pharetra nec dui. Quisque sed tellus felis. Donec ipsum mauris, sagittis eu accumsan in, aliquam non ipsum.
Vestibulum tempor nunc nec felis scelerisque eget elementum erat dignissim. Ut vel ipsum mollis orci venenatis luctus. Aenean vehicula quam vel quam porttitor ac iaculis elit pulvinar. Proin consequat, ipsum eu venenatis semper, justo turpis posuere tortor, ac placerat metus nisl et lectus. Nulla cursus dui id nunc ullamcorper sed semper nisl lobortis. Aliquam erat volutpat. Phasellus arcu ante, imperdiet in ornare sed, laoreet eu massa.