2012-02-02 9 views
2

バッチ業務を行うために書いたサービスがありますが、午後4時に処理を開始し、午前5時に処理を終了する必要があります。まだ処理中のジョブがある場合は、ジョブが終了するまで時間を延長する必要があります。スケジュールでWindowsサービスを開始および停止する方法はありますか?

私はタイマーなどでオンスタートコールをラップしますか?無限になるまで(またはボックスタンクや処理されない例外が満たされるまで)、サービスを開始して実行するのに慣れているので、これがどうなるかわかりません。

これを達成する方法については、私は確かに感謝しています。

編集:SSISパッケージをC#でdtexec()とバッチファイルで実行しているため、サービスが必要です。 dbaseとキュー管理にロギングするようなものもあります。

各ジョブの時間の長さは変わります。数分間で完了するジョブもあれば、5時間かかるジョブもあります。

+6

なぜサービスを停止するのではなく、サービスを停止したいのですか? –

+0

2つ目のプロセスが最初のプロセスに依存している場合、最初のプロセスが完了するまで2番目のプロセスを実行しようとしても意味がありません.. 2つのプロセスが完全に独立していて、テーブルの更新、挿入、削除など...それは完全に終了するまで最初のプロセスを実行する必要があるように聞こえます。 – MethodMan

+0

サービスは必要ありません。タスクをスケジュールするだけです。それは完了するまで実行されます –

答えて

1

の3つのオプション:

  1. あなたは、Windowsのタスクスケジューラを使用して、指定された時間にタスクを開始し、タスクが実行されているどのくらいのプログラム内でトラックを保つことができます。

  2. サービスは常に実行中ですが、実行の間に一定の時間スリープ状態にします。しかし、プログラムが予想よりも長く実行された場合、これは問題につながります。

  3. サービスを15分間隔で実行し、その時刻を確認します。開始期間中の場合は、プログラムを開始します。

第1位と第3位が最良の選択肢のようです。

+0

タスクスケジューラは魅力的ですが、終了する必要があるジョブがあるときにシャットダウン時間を超えてサービスを実行し続けることができるのだろうかと思います。私が言ったように、そのSSISパッケージは、C#でdtexecを使って発射しています。シャットオフ時間が午前5時を超えても、仕事は完了しなければなりません。私はオプション3がこれまで最高だったのが好きです。 –

4

これは、Windowsタスクスケジューラによってうまく処理されるタスクのようです。 Win2KやXPのようなものを実行していない限り、特定の時間に起動するために必要なすべての設定があり、限られた時間の実行を許可し、特定の資格情報でプロセスを開始できます(実行する必要がある場合誰もログオンしていないときに実行されます)。

そして、それをすべて管理するための便利なGUIがあり、コーディングは必要ありません!あなたが本当に必要なものをあなたのコメントに基づいて

UPDATE

OKは、ワークフローです。私がやることは、個々のタスクを個別のプロジェクト(個別の.exe、または必要に応じて.dll)で開発することです。次に、Windows Workflow Foundationを見て、個々のタスクを実行するために使用できるワークフロー「コントローラ」を開発します。

+0

ええ、私はあなたが言ったすべてに同意します。私のケースでそれを使用しないという唯一の制約は、サービスが期限を超えても処理を終了しなければならないことです。私はかなりこれがTSでできないと確信しています。私が間違っているなら、私を訂正してください。 –

+0

はい、間違っています。私は、あなたが実際にその制限を適用しようとしていない場合は、 "時間制限"を持つ点が何であるか分かりません。しかし、はい、あなたはタスクを開始することができ、それが完了するまで実行させてから停止し、完了します。何か不足していますか? – CodingGorilla

+0

アプリケーションは基本的にジョブ処理キューです。処理時間の異なる複数のジョブが混在しています。一部は午前5時前に停止し、その他は徹夜することができます。この場合、午後4時から午前5時までの間に1つのジョブしか実行できません。午前4時59分にジョブが終了した場合、処理を停止して、そのDBに対して他のサービスを実行させなければならない。これが期限の目的です。 –

1

無限になるまでサービスを実行して、それが午後4時であるかどうかを確認し、そうであれば作業を開始し、午前5時には午後4時にもう一度やり直してください。あなたが探しているもの

1

scheduled job

であるあなたは//Windowsサービスを持っている必要がある場合、私はこの種のもののために30分を使用したときに、(一度にチェックするためにタイマーを使用してタイマーを設定)、時間が午前4時から午前5時の間であれば、仕事をしてください。

+0

私はプロセスの実行を処理しているので、サービスを使用する必要があります。基本的にdtexecとバッチファイルを使ってSSISパッケージを起動します。 SSISパッケージは、サービスを終了する前に完了する必要があります。 –

1

あなたはquartz.netを見ることができます。これは、この種のことを実行する優れたスケジューリングライブラリであり、あなたのサービスにプロセスで実行することができます。

+0

実際、これは素晴らしいツールセットです。私はすべてのことを読む時間を費やしました。今回はそれを使うのかどうか分かりませんが、アイデアは+1です。 –