ข้ามไปเนื้อหาหลัก

เลิกใช้ Cron หันมาใช้งาน systemd.timer บน Linux ดีกว่า

คู่มือการใช้งาน systemd.timer บน Linux เพื่อจัดการงานรันอัตโนมัติแทน cron แบบเดิม พร้อมตัวอย่างการตั้งค่า Calendar และ Monotonic timers

เรียบเรียงโดย AI
Inewgen
09 Oct 2026ที่มา: Dev.to3 นาทีอ่าน (0 ครั้ง)
แชร์
เลิกใช้ Cron หันมาใช้งาน systemd.timer บน Linux ดีกว่า

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ขนาดตัวอักษร
  • systemd.timer เข้ามาทดแทน cron แบบเดิมพร้อมข้อดีด้านการจัดการและ dependency
  • รองรับทั้งเงื่อนไขเวลาแบบปฏิทิน (Calendar) และช่วงเวลา (Monotonic)
  • มีฟังก์ชันช่วยจัดการความหน่วงและป้องกันปัญหารันงานซ้อนทับ

การตั้งเวลารันงานอัตโนมัติบนระบบปฏิบัติการ Linux แบบดั้งเดิมมักพึ่งพา crontab เสมอ แต่ในปัจจุบัน systemd มีเครื่องมือระดับเฟิร์สคลาสอย่าง .timer units เข้ามาทำหน้าที่นี้ โดยแยกส่วนการกำหนดเวลา (.timer) ออกจากงานที่ต้องการรัน (.service) ทำให้ผู้ดูแลระบบสามารถใช้งาน journal, sandbox, ข้อมูลรับรอง และการควบคุมทรัพยากรแบบเดียวกับ daemons ทั่วไปได้ทันที แถมยังมาพร้อมกับนิพจน์ปฏิทินที่ทดสอบได้ง่ายกว่าสตริง cron แบบห้าฟิลด์

คู่มือการใช้งานนี้อ้างอิงพฤติกรรมและค่าเริ่มต้นจาก systemd.timer(5), systemd.time(7), systemd.service(5), systemd.exec(5), systemctl(1) และ stock units บน systemd 257 ซึ่งผ่านการตรวจสอบบน Debian 13 หรือรุ่น 257.13 โดยสามารถทดแทนคำสั่งรันสคริปต์รายคืน ทุกๆ N นาที หรือครั้งเดียวหลังบูตเครื่องได้เป็นอย่างดี พร้อมความสามารถในการสังเกตการณ์และการเรียงลำดับการพึ่งพาที่ดีขึ้น

Linux system administration terminal configuration

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ในส่วนของการเปรียบเทียบระหว่าง Calendar timers และ Monotonic timers นั้น โดย Realtime timers จะใช้ OnCalendar= เพื่ออ้างอิงตามนาฬิกาจริงและเขตเวลา หากเครื่องคอมพิวเตอร์อยู่ในสถานะหลับ (sleep) ขณะที่อีเวนต์ปฏิทินนั้นผ่านพ้นไป systemd จะทำการเรียกใช้งานย้อนหลังให้ทันทีเมื่อเครื่องตื่นขึ้นมา โดยจะรันเพียงหนึ่งครั้งแม้ว่านิพจน์จะตรงกันหลายครั้งในช่วงที่หลับก็ตาม

การเปลี่ยนผ่านจาก cron มาสู่ systemd.timer ช่วยแก้ปัญหาความยุ่งยากในการตรวจสอบล็อกและการจัดการดีพนเดนซีที่ cron แบบเดิมทำได้ยาก ระบบ systemd ช่วยให้งานเบื้องหลังถูกผนวกเข้ากับระบบจัดการบริการหลักของ Linux อย่างสมบูรณ์ ทำให้การตั้งค่ามีความสอดคล้องกับโครงสร้างพื้นฐานของระบบมากขึ้น

สำหรับการตรวจสอบความถูกต้องของนิพจน์ก่อนนำไปใช้งานจริง สามารถใช้คำสั่ง systemd-analyze calendar เช่น การตรวจสอบรูปแบบรายวันหรือวันจันทร์เวลา 09:00 น. นอกจากนี้บนระบบที่ไม่มีแบตเตอรี่สำรองนาฬิกาฮาร์ดแวร์ ควรถเปิดใช้งาน systemd-time-wait-sync.service เพื่อให้ปฏิทินไทม์เมอร์รอการปรับเวลาให้ตรงกับเครือข่ายเสียก่อน

ไม่อยากพลาดข่าวใหม่?

สมัครรับสรุปข่าวสารใหม่ทางอีเมล ไม่บ่อยจนรำคาญ

โฆษณา

ในส่วนของพารามิเตอร์อย่าง AccuracySec= และ RandomizedDelaySec= ถึงแม้ชื่อจะคล้ายกันแต่ทำหน้าที่ต่างกัน โดย AccuracySec= ใช้กำหนดความแม่นยำของเวลา ส่วน RandomizedDelaySec= ใช้หน่วงเวลาแบบสุ่มเพื่อกระจายภาระงานในระบบที่มีโฮสต์จำนวนมาก เช่น การตั้งค่า fstrim.timer ที่ใช้ปฏิทินรายวัน ความแม่นยำ 1 ชั่วโมง และมีการหน่วงเวลาแบบสุ่มสูงสุด 100 นาทีพร้อมเปิดใช้งาน Persistent=true

หากตั้งค่า Persistent=true สำหรับปฏิทินไทม์เมอร์ systemd จะทำการบันทึกประทับเวลาการเรียกใช้งานครั้งล่าสุดไว้บนดิสก์ หากเครื่องคอมพิวเตอร์ปิดตัวลงในช่วงเวลาที่ควรจะรันงาน บริการนั้นจะถูกรันหนึ่งครั้งทันทีเมื่อตัวไทม์เมอร์ถูกเปิดใช้งาน โดยยังคงอยู่ภายใต้การควบคุมของ RandomizedDelaySec= เช่นเดิม

ที่มา: Dev.to

ความคิดเห็น

แสดงความคิดเห็น
0/2000

พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้