พิเศษ! เพียงใช้โค้ด freehosting1y รับฟรีโฮสติ้ง 1 ปี เฉพาะออเดอร์ที่มียอดซื้อตั้งแต่ 25,000 บาทขึ้นไปที่มีโฮสติ้ง

วิธีใช้ Systemd Timers ทำงานรายวัน รายสัปดาห์ รายเดือน อัตโนมัติ

  • 0:45 min

  • 0 comments

ถาม:

วิธีใช้ Systemd Timers ทำงานรายวัน รายสัปดาห์ รายเดือน อัตโนมัติทำยังไง


ตอบ:

การทำงานอัตโนมัติ (Automation) บน Linux มักจะทำผ่าน cron เป็นหลัก แต่ systemd timers เป็นทางเลือกที่ทันสมัยกว่า มีความสามารถในการจัดการ Log, การตรวจสอบสถานะ และการจัดการทรัพยากรที่ดีกว่ามาก

บทความนี้จะสอนวิธีใช้ Systemd Timers แทน Cron เพื่อรันงานรายวัน รายสัปดาห์ และรายเดือนครับ


1. ปัญหาของ Cron

แม้ cron จะใช้งานง่าย แต่มีข้อจำกัดหลายอย่าง:
* ตรวจสอบยาก: การดู Log ของงานที่รันผ่าน cron ทำได้ค่อนข้างยาก
* Dependency: ไม่สามารถจัดการลำดับความสำคัญของ Service ได้ดีนัก
* การจัดการทรัพยากร: ควบคุมการใช้ CPU/RAM ของงานนั้นๆ ได้จำกัด
* ความยืดหยุ่น: หากเครื่องปิดอยู่ตอนถึงเวลาที่ต้องรันงาน cron ส่วนใหญ่จะข้ามรอบนั้นไปเลย


2. ขั้นตอนการตั้งค่า Systemd Timers

การสร้าง Timer ใน Systemd ต้องใช้ไฟล์คู่กัน 2 ไฟล์เสมอ:
1. Service File (.service): ระบุว่า “จะทำอะไร”
2. Timer File (.timer): ระบุว่า “จะทำเมื่อไหร่”

ขั้นตอนการสร้าง:

  1. สร้าง Service File: ไปที่ /etc/systemd/system/mytask.service

    “`ini

    [Unit]

    Description=My Task Service

[Service]
ExecStart=/usr/bin/python3 /path/to/script.py
“`

  1. สร้าง Timer File: ไปที่ /etc/systemd/system/mytask.timer

    “`ini

    [Unit]

    Description=Run mytask daily/weekly/monthly

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target
“`

  1. Reload และสั่งงาน:

    bash

    sudo systemctl daemon-reload

    sudo systemctl enable --now mytask.timer

3. ตัวอย่างการตั้งเวลา (OnCalendar)

หัวใจสำคัญคือค่า OnCalendar ซึ่งยืดหยุ่นมาก:

  • รายวัน: OnCalendar=daily (รันเวลา 00:00:00 ทุกวัน)
  • รายสัปดาห์: OnCalendar=weekly (รันทุกวันจันทร์ 00:00:00)
  • รายเดือน: OnCalendar=monthly (รันวันที่ 1 ของเดือน 00:00:00)
  • ระบุเวลาเฉพาะ: OnCalendar=*-*-* 03:00:00 (รันทุกวันตอนตี 3)
  • ระบุวันในสัปดาห์: OnCalendar=Mon..Fri *-*-* 09:00:00 (รันจันทร์-ศุกร์ ตอน 9 โมงเช้า)

4. ข้อควรระวัง (Best Practices)

  1. Persistent=true: สำคัญมาก! หากคุณตั้งค่านี้เป็น true และเครื่องปิดอยู่ตอนถึงเวลารัน เมื่อเปิดเครื่องขึ้นมา Systemd จะรันงานนั้น “ทันที” เพื่อชดเชยรอบที่พลาดไป
  2. ใช้ Absolute Path: ในไฟล์ Service ให้ใช้ Path เต็มเสมอ (เช่น /usr/bin/python3 แทนที่จะใช้แค่ python3) เพราะ Systemd ไม่ได้ใช้ environment variable เดียวกับ shell ของคุณ
  3. การตรวจสอบสถานะ: คุณสามารถดูสถานะและประวัติการรันได้ด้วยคำสั่ง:
  4. systemctl list-timers (ดูรายการ Timer ทั้งหมด)
  5. journalctl -u mytask.service (ดู Log การรันของงานนั้น)
  6. User vs System: หากคุณเป็น User ปกติและไม่อยากยุ่งกับไฟล์ใน /etc/systemd/system/ คุณสามารถสร้าง Timer ไว้ที่ ~/.config/systemd/user/ ได้เช่นกัน (ไม่ต้องใช้ sudo)
  7. ความซับซ้อน: หากงานของคุณไม่ได้ต้องการความซับซ้อนของ Systemd (เช่น แค่ copy ไฟล์ง่ายๆ) cron อาจจะยังเป็นตัวเลือกที่เร็วกว่า แต่ถ้าเป็นงาน Production ที่ต้องการ Log และความเสถียร Systemd Timers คือคำตอบที่ดีที่สุดครับ

Outsource.Men รับพัฒนาเว็บไซต์ Shopify, Wordpress, Wix, ดูแลระบบ ERP, SaaS, Cloud, เขียนโปรแกรม Tradingview, Liquid, Google และดูแลระบบธุรกิจออนไลน์ โดยทีมผู้เชี่ยวชาญอิสระ

รับคำปรึกษาฟรี >>คลิกที่นี่<<

แชร์โพสต์นี้:

01

Jul

วิธีใช้ Systemd Timers ทำงานรายวัน รายสัปดาห์ รายเดือน อัตโนมัติ

ถาม: วิธีใช้ Systemd Timers ทำงานรายวัน รายสัปดาห์ รายเดือน อัตโนมัติทำยังไง ตอบ: การทำงานอัตโนมัติ (Automation) บน Linux มักจะทำผ่าน cron เป็นหลัก แต่ systemd timers เป็นทางเลือกที่ทันสมัยกว่า มีความสามารถในการจัดการ Log, การตรวจสอบสถานะ และการจัดการทรัพยากรที่ดีกว่ามาก บทความนี้จะสอนวิธีใช้…

12

Jun

ว่าโดยอายุและลูกเล่น KDE ควรจะเป็น DE อันดับ 1, แต่ทำไมสถิติจริงไม่เป็นอย่างนั้น

ถ้าวัดกันที่ “อายุ” (KDE เกิดปี 1996 เก่าแก่กว่า GNOME เสียอีก) และ “ลูกเล่น” (Feature-rich, ปรับแต่งได้ตั้งแต่สากกระเบือยันเรือรบ) KDE Plasma ควรจะยืนหนึ่งในโลก Linux Desktop แบบทิ้งห่างแต่ในความเป็นจริง สถิติส่วนใหญ่ (เช่น ข้อมูลจาก Ubuntu, Fedora หรือการสำรวจของค่ายต่างๆ) มักจะพบว่า…