はじめに
C#でCron式の定期実行を実現するライブラリCronSTDについて紹介します。
このライブラリを使用することで、アプリケーション内で簡単にCron形式の定期実行設定ができます。文字列でCron式を指定するだけでタスクのスケジュール実行が可能です。LinuxのCronと同等の定期実行を再現することができます。
また、複数のジョブを同時実行したり、ジョブの開始終了時刻を指定したりと、柔軟なスケジューリングができます。CronSTDのライセンスはMITライセンスのため、商用利用も可能です。
このライブラリを活用すれば、アプリケーションに定期実行機能を簡単に実装できます。今回の記事では、CronSTDの組み込み方法と、CronSTDのソースコード例を紹介します。
Visual Studio 2022
プロジェクトテンプレート:
Windowsフォームアプリケーション(.Net Fremework)
ライブラリ組み込み方法
まず初めに、パッケージマネージャーコンソールよりCronSTDライブラリを追加します。
NuGet\Install-Package CronSTD -Version 1.0.1
サンプルソースコード
CronSTDを利用したサンプルソースコードです。このサンプルコードでは、Form画面起動時にCron定期実行を起動しています。
using CronSTD;
namespace TestCron
{
public partial class Form1 : Form
{
private readonly CronDaemon crond = new CronDaemon();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//1分間隔で実行
crond.AddJob("* * * * *", taskrun1);
//5分間隔で実行
crond.AddJob("0,5,10,15,20,25,30,35,40,45,50,55 * * * *", taskrun5);
//15分間隔で実行
crond.AddJob("0,15,30,45 * * * *", taskrun15);
//1時間間隔で実行
crond.AddJob("0 * * * *", taskrun60);
crond.Start();
}
private void taskrun1()
{
DateTime dt = DateTime.Now;
Console.WriteLine(dt.ToString("yyyy/MM/dd HH:mm:ss")
+ " CronRun1");
}
private void taskrun5()
{
DateTime dt = DateTime.Now;
Console.WriteLine(dt.ToString("yyyy/MM/dd HH:mm:ss")
+ " CronRun5");
}
private void taskrun15()
{
DateTime dt = DateTime.Now;
Console.WriteLine(dt.ToString("yyyy/MM/dd HH:mm:ss")
+ " CronRun15");
}
private void taskrun60()
{
DateTime dt = DateTime.Now;
Console.WriteLine(dt.ToString("yyyy/MM/dd HH:mm:ss")
+ " CronRun60");
}
}
}
このサンプルソースコードを実行すると、1分間間隔、5分間隔、15分間隔、1時間間隔の4つのタスクが並列実行します。
AddJobメソッドへの引数は、LinuxのCronと同様に、“* * * * *”, Commandの書式です。*の左から分、時、日、月、曜日の実行周期を設定します。
*1桁目:分:0-59
*2桁目:時間:0-23
*3桁目:日:1-31
*4桁目:月:1-12
*5桁目:曜日:0-6(日曜日は0)
本サンプルのソースコードで実行した場合の動作を次にて説明します。
動作説明
サンプルソースコードの動作説明です。
crond.AddJob(“* * * * *”, taskrun1)
taskrun1メソッドが1分間隔で実行されます。
下記のようにコンソールには出力されます。
2023/12/21 16:24:07 CronRun1
2023/12/21 16:25:07 CronRun1
2023/12/21 16:26:07 CronRun1
2023/12/21 16:27:07 CronRun1
2023/12/21 16:28:07 CronRun1
…
crond.AddJob(“0,5,10,15,20,25,30,35,40,45,50,55 * * * *”, taskrun5);
taskrun5メソッドが5分間隔で実行されます。
下記のようにコンソールには出力されます。
2023/12/21 16:25:07 CronRun5
2023/12/21 16:30:07 CronRun5
2023/12/21 16:35:07 CronRun5
2023/12/21 16:40:07 CronRun5
2023/12/21 16:45:07 CronRun5
…
crond.AddJob(“0,15,30,45 * * * *”, taskrun15);
taskrun15メソッドが15分間隔で実行されます。
下記のようにコンソールには出力されます。
2023/12/21 16:30:07 CronRun15
2023/12/21 16:45:07 CronRun15
2023/12/21 17:00:08 CronRun15
2023/12/21 17:15:08 CronRun15
2023/12/21 17:30:08 CronRun15
…
crond.AddJob(“0 * * * *”, taskrun60);
taskrun60メソッドが1時間間隔で実行されます。
下記のようにコンソールには出力されます。
2023/12/21 17:00:08 CronRun60
2023/12/21 18:00:09 CronRun60
2023/12/21 19:00:11 CronRun60
2023/12/21 20:00:12 CronRun60
…
さいごに
C#のCron定期実行ライブラリCronSTDの使い方を紹介しました。
CronSTDを使うことで、Cron書式で設定できるため、ソースコードが直感的に分かりやすく、シンプルになります。定期実行のスケジューリングにお悩みの方は、ぜひこのライブラリを試してみてください。柔軟な設定ができるうえ同時実行などの活用法も豊富にあるので、スケジューラーとしての機能をしっかり満たせるはずです。
ぜひCronSTDを上手く利用して、アプリケーションの自動化や定期処理の効率化を図っていただければ幸いです。
コメント