- read

บันทึกการทำ Cron-job ด้วย Flask Python , Node, Golang แบบง่ายๆ

Thepnatee Phojan 7

บันทึกการทำ Cronjob จากภาษาที่เราใช้ทำงาน วนเวียนกันไปมา สาเหตุมาจากที่เราต้องนั่ง Summary Report สัก 1 ครั้ง ต่อวันแถม ขี้เกียจขึ้นไป Config Job บน Server เราก็เลยจะทำ cron job แปะไปใน code เลยเท่านั้น 5555 +

บันทึกนี้ก็จะพาไปทำ 3 ภาษาที่บันทึกไว้ดีกว่าเดี๋ยวลืมอีก

  1. Flask Python
  2. Node
  3. Golang

ส่วนท่านไหนทำท่าอื่นแปะ มาได้เลยนะครับเป็นบันทึกของเราเองได้เรียนรู้

Flask Python

เราเลือกใช้อันนี้ซึ่ง Config ง่ายๆมากๆ

  1. ตอน create_app เพิ่ม config : SCHEDULER_API_ENABLED = true
  2. ผมทำ routing controller แล้ว import : APScheduler
  3. ประกาศให้ scheduler ให้เรียก function APScheduler พร้อมสั่งให้มันอ่านมาที่ routing เมื่อเริ่ม run สุดท้ายก็ใช้function start() เพื่อเริ่มทำงาน

ประเภทของ task จะมี interval กับ cron ซึ่งก็แล้วแต่เพื่อนๆ สะดวก

  1. ถ้าใช้ task : interval ก็จะสั่งให้มันทำ seconds=30 (int|str) เสริมๆ สามารถใส่เพิ่ม start_date:”2022–10–01 12:00:00" คือสั่งให้เริ่มทำเมื่อเวลานั้นได้ด้วย
  2. ถ้าใช้ cron อันนี้ชอบเลย จะกำหนด
    @scheduler.task(‘cron’, id=’report_run_job’, hour=’22', minute=’00')
    ทำทุกๆ 4 ทุ่มก็ได้ หรือถ้าใส่ * ก็จะทำทุกๆ type เช่น minute=”*” คือทุกๆ นาที

เราจะทำเป็น microservice ตัวหนึ่งไว้ ก็เป็นทางออกหนึ่งไว้มาจัดการ

ที่จะเจอคือตอนใช้รวมกับ async แล้วเขาขึ้น Error Set Time Localz เขาก็แนะนำให้ทำเรื่อง timezone ไปด้วยแต่เราไม่ได้ทำ เพราะ run แค่ 2 job เผื่อใครทำเยอะๆก็แนะนำนะ เอกสาร ลิ้งค์แรกด้านบนบอกครบเลย ลองดูนะ

Node

ซึ่งในตัวอย่างผม create node project ขึ้นมาใหม่ และ ผมก็ใช้คำสั่ง

npm install — save node-cron

เปรี้ยง ได้เลย พร้อมใช้งานหน้าตาแบบด้านล่างเพียง 4 บรรทัด

จะสังเกตุว่าตรง schedule สามารถใช้ ‘* * * * * *’ แบบที่คุ้นหน้าคุ้นตาได้เลย แต่ถ้าอยากรู้มากกว่านี้ อ่านบทความนี้

ก็ได้นะ หรือ สามารถ Generate จาก

เรียกแค่นี้เลยเรียกว่าติดตั้งแล้วเรียกพี่เขาได้เลยนะ ผมลองเอามาตั้งยิง LINE Notify ก็จะได้หน้าตาแบบตัวอย่างด้านล่างนี้เลย

ผมเอาตัวอย่าง Code ง่ายๆ แปะไว้ตรงนี้เลย

Golang

ในตัวอย่างนี้ผมcreate new project ขึ้นมาใหม่ แล้วก็เพิ่มคำสั่ง

go get github.com/robfig/cron

เรียบร้อย เราก็ลุยได้เลยนะจากตัวอย่างแค่ไม่กี่บรรทัดเอง สั้นเข้าไปอีกนะ

คราวนี้มาลองยิง LINE Notify กันดู ให้เพิ่มคำสั่งตามนี้

go get -u github.com/juunini/simple-go-line-notify

ทะด้า….ก็จะได้หน้าตาแบบนี้เลยสะดวกมากๆ แถมใช้ * * * * * สะด้วยนะ ยังงี้ก็สนุก

แปะ Code ไว้

เรียบร้อย

บันทึกการทำ cronjob ที่อยากจะทำไว้แชร์ให้ตัวเอง หรือถ้าเพื่อนๆมาเห็นอยากจะนำเสนอพิเศษตัวไหนๆ ก็ Comment มานะ เราจะรู้ด้วย