ตั้ง Scheduled Task และ Cron บน Plesk
งานที่ต้องทำซ้ำตามเวลาเป็นส่วนสำคัญของเว็บที่ทำงานจริง ตั้งแต่การสำรองข้อมูล การล้างไฟล์ชั่วคราว ไปจนถึงการรัน WP-Cron ของ WordPress ให้ตรงเวลาแทนการรอให้มีคนเข้าเว็บ
Plesk มีหน้าจอจัดการงานเหล่านี้ที่ใช้งานง่ายกว่าการแก้ crontab โดยตรง และรองรับการส่งผลลัพธ์ทางอีเมลซึ่งช่วยให้รู้ทันทีเมื่องานล้มเหลว
สิ่งที่ต้องเตรียม
- Plesk Obsidian และสิทธิ์เข้าถึงโดเมนที่ต้องการ
- คำสั่งหรือสคริปต์ที่ทดสอบด้วยมือจนผ่านแล้ว
ทดสอบด้วยมือก่อนเสมอ ปัญหาส่วนใหญ่ของงานตามเวลาไม่ได้อยู่ที่ตัวตั้งเวลา แต่อยู่ที่สคริปต์ที่พึ่งพาสภาพแวดล้อมซึ่งมีเฉพาะตอนล็อกอิน
ขั้นตอนที่ 1: สร้างงานใหม่
ไปที่ Domains เลือกโดเมน แล้ว Scheduled Tasks แล้วกด Add Task
เลือกชนิดของงาน
- Run a command รันคำสั่งของระบบ ยืดหยุ่นที่สุด
- Fetch a URL เรียก URL ผ่าน HTTP เหมาะกับงานที่เขียนเป็นหน้าเว็บ
- Run a PHP script รันไฟล์ PHP โดยตรงด้วย PHP ของโดเมนนั้น
ขั้นตอนที่ 2: ตัวอย่างงานที่ใช้บ่อย
รัน WP-Cron ของ WordPress
ปิด WP-Cron ในไฟล์ wp-config.php ก่อน
define('DISABLE_WP_CRON', true);
แล้วสร้างงานชนิด Run a PHP script
Script path: httpdocs/wp-cron.php
Arguments: (เว้นว่าง)
Run: Cron style */5 * * * *
วิธีนี้ดีกว่าการใช้ Fetch a URL เพราะไม่กิน worker ของเว็บและไม่ติดปัญหาเมื่อเว็บมีการป้องกันด้วยรหัสผ่าน
ล้างไฟล์ชั่วคราว
Command: find /var/www/vhosts/example.com/httpdocs/wp-content/uploads/tmp -type f -mtime +7 -delete
Run: Daily at 03:00
สำรองฐานข้อมูล
Command: /usr/local/bin/backup-db.sh
Run: Daily at 02:00
ขั้นตอนที่ 3: ตั้งรอบเวลา
Plesk ให้เลือกได้สองแบบ แบบง่ายที่เลือกจากรายการ และแบบ Cron style ที่ยืดหยุ่นกว่า
# รูปแบบ: นาที ชั่วโมง วันที่ เดือน วันในสัปดาห์
*/5 * * * * ทุก 5 นาที
0 * * * * ทุกต้นชั่วโมง
0 3 * * * ทุกวันตีสาม
30 2 * * 1 ทุกวันจันทร์ 02:30
0 4 1 * * ทุกวันที่ 1 ของเดือน ตีสี่
0 */6 * * * ทุก 6 ชั่วโมง
ตรวจว่าเซิร์ฟเวอร์ใช้ Timezone อะไร เพราะเวลาที่ตั้งอิงตามนั้น
timedatectl
sudo plesk bin server_pref --show | grep -i time
ตั้งเป็นเวลาไทยได้ที่ Tools & Settings แล้ว System Time
ขั้นตอนที่ 4: ตั้งการรับผลลัพธ์
ในหน้าสร้างงาน มีตัวเลือก Notify ซึ่งแนะนำให้ตั้งเป็น Errors only
- Do not notify ไม่ส่งเลย เสี่ยงที่งานจะล้มเหลวเงียบ ๆ เป็นเดือน
- Errors only ส่งเฉพาะเมื่อมีข้อความออกทาง stderr หรือ exit code ไม่เป็นศูนย์ เหมาะที่สุด
- Always ส่งทุกครั้ง ทำให้อีเมลท่วมจนคนเลิกอ่าน ซึ่งแย่กว่าไม่ส่งเลย
เขียนสคริปต์ให้เงียบเมื่อสำเร็จและพูดเมื่อผิดพลาด จะได้ประโยชน์จากตัวเลือกนี้เต็มที่
#!/bin/bash
set -euo pipefail
if ! mysqldump --single-transaction mydb | gzip > /backup/db.sql.gz; then
echo "สำรองฐานข้อมูลล้มเหลว" >&2
exit 1
fi
# ไม่พิมพ์อะไรเมื่อสำเร็จ
ขั้นตอนที่ 5: ทดสอบทันทีโดยไม่ต้องรอ
ในรายการงาน กดที่ชื่องานแล้วกด Run Now ระบบจะรันทันทีและแสดงผลลัพธ์
อ่านผลลัพธ์ทั้งหมด โดยเฉพาะข้อความที่ออกทาง stderr ซึ่งเป็นสิ่งที่ทำให้งานถูกนับว่าล้มเหลว
ขั้นตอนที่ 6: ดูงานทั้งหมดจากบรรทัดคำสั่ง
# งานของผู้ใช้โดเมน
sudo crontab -l -u example_user
# งานของ root
sudo crontab -l
# ไฟล์ cron ของระบบ
ls -l /etc/cron.d/
Plesk เก็บงานของแต่ละโดเมนไว้ใน crontab ของผู้ใช้ระบบที่ตรงกับโดเมนนั้น
ขั้นตอนที่ 7: ดู Log เมื่องานไม่ทำงาน
# Log ของ cron ระบบ
sudo grep CRON /var/log/syslog | tail -30
sudo journalctl -u cron --since today
# Log ของโดเมน
sudo tail -50 /var/www/vhosts/example.com/logs/error_log
ใน Log ของ cron จะเห็นว่างานถูกเรียกหรือไม่ ซึ่งแยกได้ว่าปัญหาอยู่ที่ตัวตั้งเวลาหรืออยู่ที่สคริปต์
ขั้นตอนที่ 8: ข้อควรระวัง
- ใช้พาธเต็มเสมอ งานตามเวลาไม่มี PATH เหมือนตอนล็อกอิน ใช้
/usr/bin/phpแทนphp - ระบุโฟลเดอร์ทำงาน ด้วย
cd /path && commandเพราะงานเริ่มที่โฮมไดเรกทอรีเสมอ - อย่าตั้งงานหนักในเวลาเดียวกัน กระจายเวลาออก เช่น ตีสอง ตีสองสิบห้า ตีสองสามสิบ ไม่ใช่ตีสองทั้งหมด
- ระวังงานที่รันทับกัน หากงานใช้เวลานานกว่ารอบ จะมีหลายตัวรันพร้อมกัน ใช้ไฟล์ล็อกกัน
#!/bin/bash
exec 9>/var/lock/myjob.lock
if ! flock -n 9; then
echo "งานรอบก่อนยังไม่เสร็จ ข้ามรอบนี้"
exit 0
fi
# งานจริงอยู่ตรงนี้
/usr/local/bin/heavy-task.sh
ปัญหาที่พบบ่อย
งานไม่ทำงานเลย
ตรวจว่าบริการ cron ทำงานอยู่ และตรวจว่างานถูกเปิดใช้งานในหน้า Plesk ไม่ได้ถูกปิดไว้
sudo systemctl status cron
sudo systemctl status crond # AlmaLinux และ Rocky
รันด้วยมือได้แต่ตามเวลาไม่ได้
เกือบทุกครั้งเป็นเรื่อง PATH และโฟลเดอร์ทำงาน ใช้พาธเต็มและ cd ไปยังโฟลเดอร์ที่ถูกต้องก่อนรัน
ได้อีเมลแจ้งข้อผิดพลาดทุกครั้งทั้งที่งานสำเร็จ
สคริปต์พิมพ์ข้อความออกทาง stderr แม้ทำงานปกติ ให้เปลี่ยนไปพิมพ์ทาง stdout หรือระงับด้วย 2>/dev/null เฉพาะส่วนที่ไม่ใช่ข้อผิดพลาดจริง
งานถูกฆ่ากลางทาง
อาจชนขีดจำกัดเวลาหรือหน่วยความจำของ PHP ตั้งเพิ่มเฉพาะงานนั้น
/usr/bin/php -d memory_limit=512M -d max_execution_time=0 /path/script.php
ต้องการ Cloud VPS พร้อม Plesk ที่มีทีมงานช่วยตั้งงานอัตโนมัติให้ ติดต่อ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
Related Posts
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี








