Cron Jobs & Tự Động Hóa VPS TrumVPS - Backup, Restart, Deploy, Telegram Alert Tự Động 24/7
Bạn có phải thức khuya để backup website? Quên restart service sau khi update? Không biết VPS sắp hết disk cho đến khi website crash? Cron jobs chính là "người trợ lý ảo" giúp bạn tự động hóa mọi tác vụ trên VPS — từ backup, dọn dẹp, monitoring, đến gửi cảnh báo qua Telegram. Tất cả chạy tự động 24/7 mà không cần bạn đụng tay.
phút giờ ngày tháng thứ lệnh. Ví dụ: 0 3 * * * /backup.sh → chạy backup lúc 3h sáng mỗi ngày.Cron Syntax — Bảng Cheat Sheet
* * * * * command
│ │ │ │ │
│ │ │ │ └── Thứ (0-7, 0 & 7 = Chủ nhật)
│ │ │ └──── Tháng (1-12)
│ │ └────── Ngày (1-31)
│ └──────── Giờ (0-23)
└────────── Phút (0-59)
Các ví dụ phổ biến:
| Expression | Chạy khi nào? |
|---|---|
0 3 * * * | 3:00 AM mỗi ngày |
*/5 * * * * | Mỗi 5 phút |
0 0 * * 0 | 0:00 Chủ nhật hàng tuần |
0 9 * * 1-5 | 9:00 AM thứ 2-6 |
0 1 1 * * | 1:00 AM ngày 1 mỗi tháng |
0 0,12 * * * | 0:00 và 12:00 mỗi ngày |
Quản Lý Cron Jobs
Mở crontab editor:
crontab -e
Xem cron jobs hiện tại:
crontab -l
Xóa tất cả cron jobs:
crontab -r
Xem cron log:
grep CRON /var/log/syslog
10 Cron Jobs Thiết Yếu Cho Mọi VPS
1. Backup Database Tự Động Hàng Ngày
Tạo script /opt/scripts/db-backup.sh:
#!/bin/bash
DATE=$(date +%Y-%m-%d)
BACKUP_DIR=/backup/database
mkdir -p $BACKUP_DIR
mysqldump -u root -p'YOUR_PASSWORD' --all-databases | gzip > $BACKUP_DIR/all-db-$DATE.sql.gz
# Giữ backup 7 ngày gần nhất
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
chmod +x /opt/scripts/db-backup.sh
Cron: 0 3 * * * /opt/scripts/db-backup.sh
2. Backup File Website Hàng Ngày
#!/bin/bash
DATE=$(date +%Y-%m-%d)
tar -czf /backup/files/website-$DATE.tar.gz /var/www/html
find /backup/files -name "*.tar.gz" -mtime +7 -delete
Cron: 0 4 * * * /opt/scripts/file-backup.sh
3. Dọn Log Cũ (Tránh Đầy Disk)
#!/bin/bash
# Dọn log cũ hơn 30 ngày
find /var/log -name "*.log" -mtime +30 -delete
journalctl --vacuum-time=7d
# Xóa Docker images không dùng
docker system prune -f
Cron: 0 2 * * 0 /opt/scripts/clean-logs.sh (Chủ nhật 2AM)
4. Auto-Renew SSL Certificate
0 0 * * * certbot renew --quiet --post-hook "systemctl reload nginx"
5. Kiểm Tra & Cảnh Báo Disk Space
#!/bin/bash
THRESHOLD=90
USAGE=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ $USAGE -gt $THRESHOLD ]; then
curl -s -X POST "https://api.telegram.org/bot/sendMessage" \
-d chat_id= -d text="⚠️ VPS disk usage: ${USAGE}%"
fi
Cron: 0 */6 * * * /opt/scripts/check-disk.sh (mỗi 6 giờ)
6. Kiểm Tra & Cảnh Báo Service Status
#!/bin/bash
SERVICES="nginx mysql docker"
for svc in $SERVICES; do
if ! systemctl is-active --quiet $svc; then
curl -s -X POST "https://api.telegram.org/bot/sendMessage" \
-d chat_id= -d text="🚨 ${svc} is DOWN on $(hostname)!"
fi
done
Cron: */5 * * * * /opt/scripts/check-services.sh
7. Auto-Update Hệ Thống (Cẩn Thận!)
#!/bin/bash
apt update && apt upgrade -y
# Chỉ update security patches
# unattended-upgrades nếu muốn an toàn hơn
Cron: 0 5 * * 0 /opt/scripts/auto-update.sh (Chủ nhật 5AM)
8. Restart Service Nếu Memory Cao
#!/bin/bash
MEM=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
if (( $(echo "$MEM > 95" | bc -l) )); then
systemctl restart php8.2-fpm
curl -s -X POST "https://api.telegram.org/bot/sendMessage" \
-d chat_id= -d text="🔄 PHP-FPM restarted: memory ${MEM}%"
fi
Cron: */10 * * * * /opt/scripts/check-memory.sh
9. Deploy Code Tự Động (Git Pull)
#!/bin/bash
cd /var/www/html
git pull origin main
# Nếu dùng static site, rebuild
# hugo / npm run build
Cron: 0 */6 * * * /opt/scripts/git-pull.sh
10. Speedtest & Log Network
#!/bin/bash
speedtest-cli --simple >> /var/log/speedtest.log
# Gửi alert nếu tốc độ < 10Mbps
Cron: 0 */12 * * * /opt/scripts/speedtest.sh
Template Script Gửi Telegram Alert
Đây là script helper để tái sử dụng trong mọi cron job:
#!/bin/bash
# /opt/scripts/telegram-alert.sh
BOT_TOKEN="YOUR_BOT_TOKEN"
CHAT_ID="YOUR_CHAT_ID"
send_alert() {
local message="$1"
curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
-d chat_id="${CHAT_ID}" \
-d text="🤖 [$(hostname)] ${message}" \
-d parse_mode="HTML" > /dev/null
}
# Usage: source telegram-alert.sh && send_alert "Backup completed ✅"
Các Lưu Ý Quan Trọng
- Dùng đường dẫn tuyệt đối: Trong cron script, luôn dùng full path (ví dụ
/usr/bin/mysqldumpthay vìmysqldump) - Log output: Thêm
>> /var/log/my-cron.log 2>&1vào cuối lệnh để debug khi có lỗi - Test thủ công trước: Chạy script bằng tay trước khi thêm vào cron
- Không spam cron quá nhanh: Chạy mỗi phút có thể làm quá tải VPS
- Giờ UTC: Cron chạy theo giờ UTC của server. Kiểm tra:
timedatectl— nên set vềAsia/Ho_Chi_Minh
Các Công Cụ Thay Thế/ Bổ Sung Cho Cron
- systemd timers: Thay thế cron hiện đại hơn, hỗ trợ randomized delay, monotonic clock
- anacron: Chạy job bị miss do server tắt (phù hợp laptop, PC)
- Jenkins / GitHub Actions: CI/CD pipeline phức tạp hơn cron
Cần VPS để chạy cron jobs 24/7?
TrumVPS - Uptime 99.9% - Cron jobs của bạn luôn chạy đúng giờ!
Mã giảm giá: 42089QPI03TI (-9%)
THUÊ VPS NGAY