Bài viết được sự cho phép của tác giả Lê Chí Dũng
Tổng quan
- Định nghĩa:
- Cron là một tiện ích cho phép thực hiện các tác vụ một cách tự động theo định kỳ, ở chế độ background của hệ thống
- Crontab (cron tab) là một file chứa đựng các thông tin config của schedule của các task được chạy
- Mục đích bài này:
- Sử dụng cron job để chạy background process trên Server
Crontab trên Server
Crontab (cron table)
- Trên server Cron files được lưu trong thư mục /var/spool/cron, cấu trúc giống như trên các os unix-like khác.
- Các lệnh dùng với crontab:
crontab -e: tạo hoặc chỉnh sửa file crontab
crontab -l: hiển thị file crontab
crontab -r: xóa file crontab
- Nếu server chưa có crontab cần install:
# Install:
yum install cronie
# Start crontab và tự động chạy mỗi khi reboot:
systemctl start crond
chkconfig crond on
- Cấu trúc:
* * * * * owner command to execute 1
* * * * * owner command to execute 2
* * * * * owner command to execute 3
- Giải thích
┌───────────── minute (0 - 59)
│ ┌───────────── hour (0 - 23)
│ │ ┌───────────── day of month (1 - 31)
│ │ │ ┌───────────── month (1 - 12)
│ │ │ │ ┌───────────── day of week (0 - 6) (Sunday to Saturday;
│ │ │ │ │ 7 is also Sunday)
│ │ │ │ │
│ │ │ │ │
* * * * * owner command to execute
Setup schedule for cron tab
Schedule | Description | Format |
---|---|---|
yearly |
Run once a year at midnight of 1 January | 0 0 1 1 * |
monthly |
Run once a month at midnight of the first day of the month | 0 0 1 * * |
weekly |
Run once a week at midnight on Sunday morning | 0 0 * * 0 |
daily |
Run once a day at midnight | 0 0 * * * |
hourly |
Run once an hour at the beginning of the hour | 0 * * * * |
Example
# Run a task for every Friday at 17:01pm
1 17 * * 5 /var/cron/pkgtabs/shutdown_server_and_go_drinking
# Run db_export_dump at 23:45 (11:45 PM) every Saturday
45 23 * * 6 /var/cron/pkgtabs/db_export_dump
# Run task for every hours
0 * * * * /var/cron/pkgtabs/send_mail
Config crontab
Để crontab tự động chạy cần kích hoạt và cấu hình crontab như sau:
crontab -e
# Sau đó nhập nội dung
# Chạy cron đơn giản, repeat theo từng giờ
crontab 0 * * * * $(OWNER) /var/share/point_tool/task1.sh
# Chạy cron tab theo từng phút, đồng thời tại lock để tránh trường hợp task chạy chồng lên nhau (task xữ lý chưa hết thời gian thì task sau đến thời điểm chỉ định sẽ không được chạy
crontab * * * * * $(OWNER) /usr/bin/flock -n /var/point_tool/cron/task2.lockfile php /var/share/point_tool/task2.php --minutely >> /var/log/cron/task2.log
Trong đó
- /usr/bin/flock -n /path/to/lockfile tạo file lock cho task, chống chạy nhiều task một lúc
- –minuly lock task theo phút
Execute crontab
Có thể start crontab ở console như sau:
# Run a task for every Friday at 17:01pm
1 17 * * 5 /var/cron/pkgtabs/shutdown_server_and_go_drinking
# Run db_export_dump at 23:45 (11:45 PM) every Saturday
45 23 * * 6 /var/cron/pkgtabs/db_export_dump
# Run task for every hours
0 * * * * /var/cron/pkgtabs/send_mail