ใช้ systemd ให้สคริปต์รันตลอด ใน Debian Server
ขั้นตอนที่ 1 — สร้าง service file
สร้างไฟล์ service ก่อน (ตัวนี้จะเป็นคำสั่งที่รัน Python จริงๆ)
sudo nano /etc/systemd/system/job.service
ใส่เนื้อหานี้ 👇
[Unit]
Description=Run Python job every 2 minutes
[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/user/job.py
WorkingDirectory=/home/user
User=root
ขั้นตอนที่ 2 — สร้าง timer file
สร้างไฟล์ timer ที่จะกำหนดช่วงเวลาให้ systemd เรียกใช้ service นี้
sudo nano /etc/systemd/system/job.timer
ใส่เนื้อหานี้ 👇
[Unit]
Description=Run job.service every 2 minutes
[Timer]
OnBootSec=1min
OnUnitActiveSec=2min
Unit=job.service
[Install]
WantedBy=timers.target
💡 ความหมาย:
OnBootSec=1min → เริ่มทำงานครั้งแรกหลังจากบูตเครื่อง 1 นาที
OnUnitActiveSec=2min → เรียกซ้ำทุกๆ 2 นาที
ขั้นตอนที่ 3 — เปิดใช้งาน timer
sudo systemctl daemon-reload
sudo systemctl enable --now job.timer
ตรวจสอบสถานะ:
systemctl list-timers --all
จะเห็นรายการประมาณนี้:
NEXT LEFT LAST PASSED UNIT ACTIVATES
Mon 2025-10-27 20:00:00 UTC 1min 30s Mon 2025-10-27 19:58:00 UTC 30s ago job.timer job.service
ขั้นตอนที่ 4 — ดู log การทำงาน
เช็ก log ของสคริปต์ได้โดย:
sudo journalctl -u job.service -f
หรือดู log ย้อนหลัง:
หรือดู log ย้อนหลัง:
sudo journalctl -u job.service
ถ้าจะปิดการทำงานต้องทำยังไง?
1️⃣ ปิดการทำงานชั่วคราว (หยุดชั่วคราว)
sudo systemctl stop job.timer
ตรวจสอบสถานะ:
sudo systemctl status job.timer
จะเห็นว่า timer ถูก “inactive (dead)” แล้ว ✅
หมายเหตุ: service (job.service) จะไม่ถูกเรียกอีกจนกว่าจะ start timer ใหม่
2️⃣ ปิดการทำงานถาวร (ไม่ให้เริ่มอัตโนมัติหลังบูต)
ใช้คำสั่งนี้:
2️⃣ ปิดการทำงานถาวร (ไม่ให้เริ่มอัตโนมัติหลังบูต)
ใช้คำสั่งนี้:
sudo systemctl disable job.timer
หากต้องการหยุดและปิดพร้อมกัน:
sudo systemctl stop job.timer
sudo systemctl disable job.timer
ตรวจสอบว่าไม่อยู่ในรายการ timer ที่ทำงาน:
systemctl list-timers --all
3️⃣ (ถ้าอยากเปิดใช้งานอีกครั้ง)
รันคำสั่งกลับได้เลย:
sudo systemctl enable --now job.timer
ถ้าต้องการลบออกจากระบบ
หากคุณไม่ต้องการให้มี timer/service นี้อีกต่อไป:
sudo systemctl stop job.timer
sudo systemctl disable job.timer
sudo rm /etc/systemd/system/job.timer
sudo rm /etc/systemd/system/job.service
sudo systemctl daemon-reload
ความคิดเห็น
แสดงความคิดเห็น