タイマー サービスのリサイクル ジョブについて

SharePoint 2010 以降、既定で 1 日に 1 度、SharePoint タイマーサービスのプロセス (OWSTIMER.EXE) が自動的に再起動されるようになりました。

SharePoint タイマーサービスでは SharePoint 既定のサービスだけでなく、ユーザーによるカスタム コードが実行される場合があります。SharePoint の以前のバージョンでは、カスタム コードの実装の問題などによりメモリーリークが発生したり、SharePoint タイマーサービスでホストされている他のサービスを巻き込んでファーム全体に問題を引き起こす可能性がありました。このような状況を避けるため、以前のバージョンでも定期的な SharePoint タイマー サービスの再起動が推奨されていましたが、SharePoint 2010 以降では、「タイマー サービスのリサイクル」タイマー ジョブにより自動で定期的にタイマー サービスが再起動されるようになっています。

SharePoint 2013 の場合、既定では毎日早朝 6 時に、タイマー サービスがリサイクルされるように設定されています。この設定は後から変更することもできますし、必要に応じてタイマー ジョブを無効にすることもできます。

 

 

タイマー サービスのリサイクル ジョブが実行されると、タイマー サービスは自身を再起動するために、SharePoint Administration Service に対して再起動を実施するようにリクエストします。
サービスが再起動される方法は、Restart-Service や NET STOP と同様の一般的なサービスの再起動プロセスになりますが、実際にサービスを再起動するまでには、いくつかの予備動作によって既存のサービスへの影響を最小限にとどめるように工夫されています。

以下に、タイマー サービスがリサイクルされるまでのプロセスを解説します。

タイマー サービスのリサイクルが開始されると、最初に警告フェーズに入り、その後カウント ダウン フェーズに入ります。これらのフェーズに入ったことを確認するには、SharePoint 診断ログを確認します。

タイマー サービスが警告フェーズに入ると、SPPausableJobDefinition ジョブ定義から派生したすべての一時停止可能 (pausable) なジョブは一時停止処理に入ります。また、警告フェーズ中には、重要度が低いジョブが新たに開始されることが許可されません。警告フェーズ中に許可されるのは、「タイマー サービスのロック管理」、「更新の構成」および、ワンタイムで明示的に実行されるタイマー ジョブのみで、その他のスケジュールされたすべてのタイマー ジョブは警告フェーズ中に実行されることはありません。

 

ヒント:

既定では、警告フェーズは 10 分間維持されるように設定されています。警告フェーズの持続時間は、以下の PowerShell コマンドにより変更可能です。

PS:> $Timer = (Get-SPFarm).TimerService

PS:> $Timer.RecycleWarningMinutes

PS:> $Timer.RecycleWarningMinutes = 3

PS:> $Timer.Update()  

警告フェーズの期間が終了すると、タイマー サービスのリサイクル ジョブは 30 秒の最終カウントダウン フェーズに入ります。この段階に入ると、「更新の構成」などの重要なジョブを含むすべてのタイマー ジョブの開始が許可されなくなります。カウントダウンの終了後、現在実行中のジョブが無いか最終チェックが行われ、実行中のジョブが無ければ、さらに 30 秒待機した後、SharePoint Administration Service によってタイマー サービスが再起動されます。

  

ヒント:

何らかの理由でタイマー サービスを再起動する必要が生じた場合、手動で以下の PowerShell コマンドを実行することにより、上記のプロセスと同等の方法でタイマー サービスを再起動することができます。

PS:> Get-SPTimerJob job-timer-recycle | Start-SPTimerJob

 

なお、先述のコマンドで RecycleWarningMinutes プロパティの値を変更していない場合、タイマー サービスのリサイクルが完了するまでには 11 分 (警告フェーズ 10 分 + カウントダウン フェーズ 1 分) 要する点に注意してください。