DevToolBoxFREE
BlogAdvertise

Cron สำหรับ Serverless: GitHub Actions, Vercel Cron และ Cloudflare Workers

9 นาทีในการอ่านโดย DevToolBox

Cron expression คือภาษาสากลสำหรับการกำหนดตารางงาน แต่แพลตฟอร์ม serverless แต่ละแห่งมีข้อจำกัดต่างกัน

พื้นฐาน Cron Expression

Cron มาตรฐานมี 5 ฟิลด์:

┌───────────── minute (0-59)
│ ┌───────────── hour (0-23)
│ │ ┌───────────── day of month (1-31)
│ │ │ ┌───────────── month (1-12)
│ │ │ │ ┌───────────── day of week (0-6, Sun=0)
│ │ │ │ │
* * * * *

ตัวอักษรพิเศษที่พบบ่อย:

  • *ค่าใดก็ได้
  • */5ทุก 5 หน่วย
  • 1,3,5ค่าเฉพาะ
  • 1-5ช่วงค่า

ทดสอบ cron ด้วย Cron Parser ของเรา →

แพลตฟอร์ม 1: GitHub Actions

GitHub Actions ใช้ event schedule.

การกำหนดค่า

# .github/workflows/scheduled.yml
name: Scheduled Job
on:
  schedule:
    - cron: '30 5 * * 1-5'  # Weekdays at 5:30 AM UTC
    - cron: '0 12 1 * *'    # 1st of every month at noon UTC
jobs:
  run:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: echo "Running scheduled task"

ข้อจำกัดหลัก

ด้านรายละเอียด
เขตเวลาUTC เท่านั้น
ช่วงต่ำสุดทุก 5 นาที (*/5 * * * *)
ความแม่นยำอาจล่าช้าได้
Branchเฉพาะ branch หลัก
ปิดการใช้งานหลัง 60 วันไม่ใช้งาน

ตารางที่พบบ่อย

# Every 5 minutes
- cron: '*/5 * * * *'

# Every hour at minute 0
- cron: '0 * * * *'

# Daily at midnight UTC
- cron: '0 0 * * *'

# Daily at 9 AM Eastern (UTC-5, no DST)
- cron: '0 14 * * *'

# Weekdays at 8 AM UTC
- cron: '0 8 * * 1-5'

# Every Monday and Thursday at 6 PM UTC
- cron: '0 18 * * 1,4'

# First day of every month at midnight
- cron: '0 0 1 * *'

Tip: GitHub Actions อาจไม่ตรงเวลา.

แพลตฟอร์ม 2: Vercel Cron Jobs

กำหนดค่าใน vercel.json.

การกำหนดค่า

// vercel.json
{
  "crons": [
    {
      "path": "/api/daily-report",
      "schedule": "0 8 * * *"
    },
    {
      "path": "/api/cleanup",
      "schedule": "0 0 * * 0"
    }
  ]
}

API Route

// app/api/daily-report/route.ts
import { NextResponse } from 'next/server';

export async function GET() {
  // Your scheduled logic here
  await sendDailyReport();
  return NextResponse.json({ ok: true });
}

// Vercel recommends setting maxDuration for long tasks
export const maxDuration = 60; // seconds

ข้อจำกัดหลัก

แผนช่วงต่ำสุดMax Cron Jobsจำกัดการรัน
Hobby (free)Once per day210s
ProOnce per hour4060s (default)
EnterpriseOnce per minute100900s

Important: Vercel ใช้ UTC. Hobby: 1/วัน.

แพลตฟอร์ม 3: Cloudflare Workers

กำหนดค่าใน wrangler.toml.

การกำหนดค่า

# wrangler.toml
name = "my-worker"
main = "src/index.ts"

[triggers]
crons = [
  "*/5 * * * *",    # Every 5 minutes
  "0 12 * * 1-5",   # Weekdays at noon UTC
  "0 0 1 * *"       # First of every month
]

Worker Code

// src/index.ts
export default {
  async scheduled(
    controller: ScheduledController,
    env: Env,
    ctx: ExecutionContext
  ) {
    // controller.cron contains the cron pattern that triggered
    switch (controller.cron) {
      case '*/5 * * * *':
        await doHealthCheck(env);
        break;
      case '0 12 * * 1-5':
        await sendReport(env);
        break;
    }
  },
};

ข้อจำกัดหลัก

ด้านรายละเอียด
เขตเวลาUTC เท่านั้น
ช่วงต่ำสุด1 ครั้ง/นาที
Max cron triggers3 ต่อ Worker (ฟรี)
CPU10ms/30s
ความแม่นยำเชื่อถือได้สูง

เปรียบเทียบแพลตฟอร์ม

ฟีเจอร์GitHub ActionsVercel CronCF Workers
TimezoneUTCUTCUTC
Min interval (free)5 min1/day1 min
Min interval (paid)5 min1/min1 min
ReliabilityMedium (can delay)HighVery high
Max execution time6 hours10s-900s10ms-30s
Config location.github/workflows/vercel.jsonwrangler.toml
Trigger handlerWorkflow YAMLAPI routescheduled() event

กับดักเขตเวลา

ทั้งสามใช้ UTC เท่านั้น.

เวลาท้องถิ่นUTC OffsetCron (9 โมงท้องถิ่น)
US Eastern (EST)UTC-50 14 * * *
US Pacific (PST)UTC-80 17 * * *
Central Europe (CET)UTC+10 8 * * *
China (CST)UTC+80 1 * * *
Japan (JST)UTC+90 0 * * *

เวลาออมแสงเปลี่ยน offset UTC.

10 Cron Expression พร้อมใช้

ตารางที่ใช้บ่อย:

# Every 5 minutes
*/5 * * * *

# Every hour at :00
0 * * * *

# Every day at midnight UTC
0 0 * * *

# Every day at noon UTC
0 12 * * *

# Weekdays (Mon-Fri) at 9 AM UTC
0 9 * * 1-5

# Every Monday at 8 AM UTC
0 8 * * 1

# Every 6 hours
0 */6 * * *

# First day of every month at midnight
0 0 1 * *

# Every 15 minutes during business hours (8-17 UTC)
*/15 8-17 * * 1-5

# Last day of month at 11 PM UTC (approximate)
0 23 28-31 * *

ตรวจสอบ cron ด้วย Cron Parser →

คำถามที่พบบ่อย

GitHub Actions ใช้เขตเวลาใด?

UTC เสมอ.

ช่วงต่ำสุด Vercel Cron?

Hobby: 1/วัน, Pro: 1/ชม., Enterprise: 1/นาที.

Cloudflare Workers ทุกวินาที?

ไม่ได้. ความละเอียดต่ำสุด: 1 นาที.

𝕏 Twitterin LinkedIn
บทความนี้มีประโยชน์ไหม?

Stay Updated

Get weekly dev tips and new tool announcements.

No spam. Unsubscribe anytime.

Partner Picks

Sponsor this article

Place your product next to this developer topic with tracked clicks.

Ask about article sponsorship

ลองเครื่องมือที่เกี่ยวข้อง

This site uses cookies for analytics and to display ads. By continuing to browse, you agree. Privacy Policy