C# .netcore ใช้งาน Crontab ไม่ง้อ Linux
จากปัญหาการใช้งาน console บน linux ที่ต้องกำหนดเวลารัน สมัยก่อนจะใช้ crontab -e บน linux เสมอ ปัญหาคือเกิดความยุ่งยากต้องไปพึ่ง network engineer ตลอด ถ้า build ขึ้น docker ก็ต้องแก้ไขไฟล์ docker เพิ่มเติม ทางแก้ปัญหาคือเราทำการตั้งค่าการรันบน C# เลย ส่งโค้ดขึ้น Git ให้ devops รันเลย ไม่ต้อง shell เพื่อจัดการ Crontab โดยมีการทำงานดังนี้
- สร้าง project เป็น netcore webaplication ชนิด API
2. add package Crontab
3. สร้างไฟล์ CrontabService.cs
4. สร้าง Class เพื่อจัดการการตั้งเวลา Crontab
5. สร้าง job เพื่อทดสอบ Crontab
method แต่ละ method จะมีการทำงานตามชื่อของมันเลย นั่นคือ
startasync => การทำงานก่อนรัน Cronjob
stopasync => การทำงานหลังจากรัน Cronjob
เราสามารถเขียนโปรแกรมการทำงานได้ที่ method DoWork ได้ โดยจากตัวอย่างคือ ทดสอบการทำงานของโปรแกรม โดยเมื่อทำงานให้เขียนเวลาออกทางหน้าจอ output
เพิ่ม service ที่สร้างในไฟล์ startup.cs
services.AddHostedService<MyCronJob3>();
และเพิ่มเวลาการรันด้วยคำสั่ง
services.AddCronJob<MyCronJob3>(c =>{c.TimeZoneInfo = TimeZoneInfo.Local;c.CronExpression = @”* * * * 4,5";});
จากตัวอย่างการตั้งค่าให้โปรแกรมรันทุกๆนาที
เราสามารถศึกษาการตั้งเวลาการรันโปรแกรมได้ที่ link
ทดสอบการรันโปรแกรม เปิด power shell พิมพ์คำสั่ง
dotnet watch run
โปรแกรมจะแสดงข้อมูลดังนี้
เราก็จะได้โปรแกรมที่สามารถรันการทำงานได้ด้วยตัวเองแล้วครับ
Reference
https://codeburst.io/schedule-cron-jobs-using-hostedservice-in-asp-net-core-e17c47ba06