Cách sử dụng Cron để tự động hóa công việc trên VPS
Một trong những cách tiêu chuẩn nhất để chạy các việc ở chế độ nền trên các máy Linux là với cron job. Chúng hữu ích cho việc lập lịch các việc trên VPS và tự động hóa các công việc liên quan đến bảo trì khác nhau. Bản thân “Cron” là một daemon (hoặc chương trình) chạy ở chế độ nền. Lịch trình cho các công việc khác nhau đang chạy nằm trong một file cấu hình có tên “crontab”.Cài đặt
Hầu hết tất cả các bản phân phối đều có dạng cron được cài đặt theo mặc định. Tuy nhiên, nếu bạn đang sử dụng một hệ thống chưa được cài đặt, bạn có thể cài đặt nó bằng các lệnh sau:
Đối với Ubuntu / Debian:
sudo apt-get update sudo apt-get install cron
Đối với Cent OS / Red Hat Linux:
sudo yum update sudo yum install vixie-cron crontabs
Bạn cần đảm bảo nó cũng chạy trong nền:
sudo /sbin/chkconfig crond on sudo /sbin/service crond start
Cú pháp
Đây là một tác vụ ví dụ ta muốn chạy:
5 * * * * curl http://www.google.com
Cú pháp cho các công việc khác nhau mà ta sẽ đặt trong crontab có thể trông đáng sợ. Nó thực sự rất ngắn gọn và dễ phân tích cú pháp nếu bạn biết cách đọc nó. Mỗi lệnh được chia thành:
- Lên lịch
- Chỉ huy
Lệnh có thể là hầu như bất kỳ lệnh nào bạn thường chạy trên dòng lệnh. Thành phần lịch trình của cú pháp được chia thành 5 tùy chọn khác nhau để lập lịch trình theo thứ tự sau:
- phút
- giờ
- Ngày trong tháng
- tháng
- ngày trong tuần
Ví dụ
Dưới đây là danh sách các ví dụ về một số lịch trình phổ biến mà bạn có thể gặp phải khi cấu hình cron.
Để chạy một lệnh mỗi phút:
* * * * *
Để chạy lệnh 12 phút một lần vào giờ:
12 * * * *
Bạn cũng có thể sử dụng các tùy chọn khác nhau cho từng trình giữ chỗ. Để chạy một lệnh sau mỗi 15 phút:
0,15,30,45 * * * *
Để chạy một lệnh hàng ngày lúc 4:00 sáng, bạn sẽ sử dụng:
0 4 * * *
Để chạy lệnh vào lúc 4:00 sáng Thứ Ba hàng tuần, bạn sẽ sử dụng:
0 4 * * 2
Bạn có thể sử dụng sự phân chia trong lịch trình của bạn . Thay vì liệt kê 0,15,30,45, bạn cũng có thể sử dụng như sau:
*/4 2-6 * * *
Lưu ý phạm vi “ 2-6
”. Cú pháp này sẽ chạy lệnh trong repository ảng thời gian từ 2 giờ sáng đến 6 giờ sáng.
Cú pháp lập lịch cực kỳ mạnh mẽ và linh hoạt. Bạn có thể thể hiện bất cứ lúc nào có thể trong tưởng tượng.
Cấu hình
Khi bạn đã ổn định lịch trình và bạn biết công việc bạn muốn thực hiện, bạn sẽ phải có một nơi để đặt nó để daemon của bạn có thể đọc nó. Có một vài chỗ khác nhau, nhưng phổ biến nhất là crontab của user . Nếu bạn nhớ lại, đây là một file chứa lịch trình công việc mà cron sẽ chạy. Các file cho mỗi user được đặt tại /var/spool/cron/crontab
, nhưng chúng không được phép chỉnh sửa trực tiếp. Thay vào đó, tốt nhất là sử dụng lệnh crontab
.
Bạn có thể chỉnh sửa crontab của bạn bằng lệnh sau:
crontab -e
Thao tác này sẽ hiển thị một editor , nơi bạn có thể nhập lịch trình của bạn với từng công việc trên một dòng mới.
Nếu bạn muốn xem crontab của bạn , nhưng không chỉnh sửa nó, bạn có thể sử dụng lệnh sau:
crontab -l
Bạn có thể xóa crontab của bạn bằng lệnh sau:
crontab -r
Nếu bạn là user có quyền , bạn có thể chỉnh sửa user khác bằng cách chỉ định crontab -u <user> -e
Đầu ra
Đối với mọi công việc cron được thực thi, địa chỉ email của user được liên kết với user đó sẽ nhận được kết quả qua email trừ khi nó được chuyển hướng vào file log hoặc vào / dev / null. Địa chỉ email có thể được chỉ định theo cách thủ công nếu bạn cung cấp cài đặt “MAILTO” ở đầu crontab. Bạn cũng có thể chỉ định shell bạn muốn chạy, đường dẫn nơi tìm kiếm binary cron và folder chính với ví dụ sau:
Đầu tiên, hãy chỉnh sửa crontab:
crontab -e
Sau đó, ta sẽ chỉnh sửa nó như vậy:
SHELL=/bin/bash HOME=/ MAILTO=”example@digitalocean.com” #This is a comment * * * * * echo ‘Run this command every minute’
Công việc cụ thể này sẽ xuất ra "Chạy lệnh này mỗi phút." Đầu ra đó sẽ được gửi qua email mỗi phút đến địa chỉ email “ example@digitalocean.com ” mà tôi đã chỉ định. Rõ ràng, đó có thể không phải là một tình huống lý tưởng. Như đã đề cập, ta cũng có thể chuyển kết quả vào file log hoặc vào một vị trí trống để tránh nhận được email cùng với kết quả .
Để thêm vào một file log , nó đơn giản như sau:
* * * * * echo ‘Run this command every minute’ >> file.log
Lưu ý: “ >>
” gắn vào một file .
Nếu bạn muốn chuyển đến một vị trí trống, hãy sử dụng /dev/null
. Đây là một tập lệnh PHP được thực thi và chạy trong nền.
* * * * * /usr/bin/php /var/www/domain.com/backup.php > /dev/null 2>&1
Hạn chế quyền truy cập
Hạn chế quyền truy cập vào cron là dễ dàng với các /etc/cron.allow
và /etc/cron.deny
file . Để cho phép hoặc từ chối user , bạn chỉ cần đặt tên user của họ vào một trong các file này, tùy thuộc vào quyền truy cập được yêu cầu. Theo mặc định, hầu hết cron daemon sẽ cho rằng tất cả user đều có quyền truy cập vào cron trừ khi một trong những file này tồn tại. Để từ chối quyền truy cập của tất cả user và cấp quyền truy cập cho user tdurden, bạn sẽ sử dụng chuỗi lệnh sau:
echo ALL >>/etc/cron.deny echo tdurden >>/etc/cron.allow
Đầu tiên, ta khóa tất cả user bằng cách thêm “ ALL
” vào file từ chối. Sau đó, bằng cách thêm tên user vào file cho phép, ta cấp cho user quyền truy cập để thực hiện các công việc cron.
Cú pháp đặc biệt
Có một số lệnh ngắn gọn mà bạn có thể sử dụng trong file crontab của bạn để quản trị dễ dàng hơn một chút. Chúng là các phím tắt cần thiết cho lịch biểu số tương đương được chỉ định:
-
@hourly
- Viết tắt cho0 * * * *
-
@daily
- Viết tắt cho0 0 * * *
-
@weekly
- Viết tắt cho0 0 * * 0
-
@monthly
- Viết tắt cho0 0 1 * *
-
@yearly
- Viết tắt cho0 0 1 1 *
và @reboot
, chạy lệnh một lần khi khởi động.
Lưu ý: Không phải tất cả các daemon cron đều có thể phân tích cú pháp này (đặc biệt là các version cũ hơn), vì vậy hãy kiểm tra kỹ nó hoạt động trước khi bạn dựa vào nó.
Để công việc chạy khi khởi động, bạn sẽ chỉnh sửa file crontab của bạn ( crontab -e
) và đặt một dòng trong file tương tự như sau:
@reboot echo "System start up"
Lệnh cụ thể này sẽ được thực thi và sau đó được gửi qua email cho user được chỉ định trong crontab.
Các tin liên quan