1. Crontab là gì?
Crontab hiểu đơn giản là một tiện ích cho phép bạn đặt lịch trình thực hiện các tác vụ định kỳ, chẳng hạn như chạy một script hay một lệnh vào những khoảng thời gian nhất định. Crontab (CRON TABle) là một file chứa đựng bảng biểu (schedule) của các entries được chạy.
2. Crontab làm việc thế nào?
Một cron schedule đơn giản là một text file. Mỗi người dùng có một cron schedule riêng, file này thường nằm ở /var/spool/cron
. Crontab files không cho phép bạn tạo hoặc chỉnh sửa trực tiếp với bất kỳ trình text editor nào, ngoại trừ khi bạn dùng lệnh crontab.
Một số lệnh thường dùng:
crontab -<span class="hljs-keyword">e</span>: tạ<span class="hljs-keyword">o</span> hoặ<span class="hljs-keyword">c</span> chỉnh sử<span class="hljs-keyword">a</span> <span class="hljs-keyword">file</span> crontab crontab -<span class="hljs-keyword">l</span>: <span class="hljs-keyword">hi</span>ển <span class="hljs-keyword">th</span>ị <span class="hljs-keyword">file</span> crontab crontab -r: <span class="hljs-keyword">x</span>ó<span class="hljs-keyword">a</span> <span class="hljs-keyword">file</span> crontab
Hầu hết tất cả VPS đều được cài đặt sẵn crontab
, tuy nhiên vẫn có trường hợp VPS không có. Nếu bạn sử dụng lệnh crontab -l
mà thấy output trả lại -bash: crontab: command not found
thì cần tự cài crontab thủ công.
Cài đặt crontab
Sử dụng lệnh:
yum install cronie
Start crontab và tự động chạy mỗi khi reboot:
service crond start
chkconfig crond on
3. Cấu trúc dòng lệnh trong crontab
Một crontab file có 5 trường xác định thời gian, cuối cùng là lệnh sẽ được chạy định kỳ, cấu trúc như sau:
* * * * * command to be executed
- - - - -
| | | | |
| | | | +----- ngày trong tuần (0 - 6) (Sunday=0)
| | | +------- tháng(1 - 12)
| | +--------- ngày trong tháng (1 - 31)
| +----------- giờ (0 - 23)
+------------- phút (0 - 59)
Nếu một cột được gán ký tự *, nó có nghĩa là tác vụ sau đó sẽ được chạy ở mọi giá trị cho cột đó.
Ví dụ:
– Chạy script 30 phút 1 lần:
0,30 * * * * command
– Chạy script 15 phút 1 lần:
0,15,30,45 * * * * command
– Chạy script vào 3 giờ sáng mỗi ngày:
0 3 * * * command
– Chạy vào 2:30 sáng mỗi Chủ Nhật:
30 2 * * 0 command
4. Ví dụ cụ thể
Đầu tiên, bạn cần tạo một script để thực hiện việc sao lưu. Giả sử bạn tạo một script có tên <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">backup_public_html.sh</mark>
trong thư mục <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">/etc</mark>
sudo nano /etc/backup_public_html.sh
Giả sử mình viết một đoạn script sao lưu toàn bộ thư mục <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">/home/domain.com/public_html/</mark>
và chuyển file nén .zip vào thư mục <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">/root/</mark>
. Nội dung script có thể như sau:
#!/bin/bash
zip -r /root/backup_domain.com_$(date +"%Y-%m-%d").zip /home/domain.com/public_html/ -q
Sau khi tạo xong script, đảm bảo rằng script có quyền thực thi:
chmod +x /etc/backup_public_html.sh
Sau đó mình cho script này chạy định kỳ vào 0 giờ (nửa đêm) hàng ngày bằng cách tạo một file crontab như sau:
crontab -e
Nhấn o (chữ o) để thêm dòng mới với nội dung:
0 0 * * * sh /etc/backup_public_html.sh
Để lưu lại và thoát bạn nhấn ESC, rồi gõ vào :wq
nhấn Enter.
Cuối cùng, nhớ khởi động lại cron daemon:
/etc/init.d/crond restart
Nếu muốn dùng Editor nano sửa cho dễ thì bạn dùng lệnh sau: <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">EDITOR=nano crontab -e</mark>
Ví dụ khác:
– Để crontab chạy file PHP vào 7 giờ thứ Hai hàng tuần:
0 7 * * 1 /usr/bin/php /var/www/html/reset.php
5. Disable email
Mặc định cron gửi email cho người thực thi cron job, nếu bạn muốn tắt chức năng gửi email này đi thì hãy thêm đoạn sau vào cuối dòng
>/dev/null 2>&1
Ví dụ:
0 15 * * 1,4 sh /etc/backup.sh >/dev/null 2>&1
6. Kiểm tra lịch sử
Để đảm bảo rằng cron job đang chạy đúng cách, bạn có thể kiểm tra log của cron
:
grep CRON /var/log/syslog