Cron Jobs & Tự Động Hóa VPS TrumVPS - Backup, Restart, Deploy, Telegram Alert Tự Động 24/7

📅 05/2026 · ⏱ 10 phút đọc · 🏷 Hướng Dẫn

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.

🤖 Cron là gì? Cron là time-based job scheduler trong Linux/Unix. Bạn định nghĩa "chạy lệnh X vào lúc Y" và cron sẽ tự động thực thi. Cú pháp: 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:

ExpressionChạy khi nào?
0 3 * * *3:00 AM mỗi ngày
*/5 * * * *Mỗi 5 phút
0 0 * * 00:00 Chủ nhật hàng tuần
0 9 * * 1-59: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

Pro tip: Dùng Healthchecks.io (miễn phí) để monitoring cron jobs. Mỗi cron job ping một URL sau khi chạy xong. Nếu cron không chạy đúng hẹn → bạn nhận được alert. Cực kỳ hữu ích cho backup scripts.

Các Công Cụ Thay Thế/ Bổ Sung Cho 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