Chạy các tác vụ theo chu kì bằng Cronjob trên Linux

Nếu như bạn đã từng làm việc với các hệ thống Linux thì hẳn đã được nghe qua về Cronjob. Trong bài viết này Mọt sẽ giúp các bạn có kiến thức cơ bản về Cronjob, hiểu về cách thức hoạt động cũng như giúp bạn tạo lập một Cronjob cơ bản. Các ví dụ, câu lệnh trong bài viết mình thực hiện trên hệ điều hành CentOS 8. Tập lệnh đối với các hệ điều hành khác như Ubuntu, Red Hat nhờ các bạn tra google giúp mình nhé !

Cronjob là gì?

Cron là một chương trình trong Linux cho phép người dùng lên lịch thực hiện một chương trình cụ thể, thường dưới dạng một tập lệnh shell (ở trong bài viết này Mọt sẽ sử dụng một script đơn giản để mô tả cho các bạn). Cron thường được sử dụng khi bạn có một tác vụ hay một chương trình cần phải chạy theo lịch trình cố định phục vụ tự động hóa các nhiệm vụ lặp đi lặp lại.

Trong thực tế Cron được những bạn làm về quản trị hệ thống của các công ty sử dụng rất nhiều phục vụ cho việc giám sát và quản trị hệ thống lớn. Ví dụ như gửi email hằng ngày, lấy thông tin hệ thống theo định kì, kiểm tra các thông số hệ thống hằng ngày. Các công việc trên hoàn toàn có thể làm bằng tay nhưng khi có cron thì khối lượng công việc sẽ được giảm tải rất nhiều và Cron có thể hoạt động chính xác theo thời gian đã định.

Ở mức cơ bản nhất, một cronjob là một mục nhập được ghi vào một bảng gọi là crontab. Cron chứa một lịch trình và một lệnh cần thực thi. Tiến trình cron (crond) tìm kiếm các mục đã được nhập trong crontab để xác định những công việc nào cần thực hiện và khi nào cần thực hiện chúng theo lịch trình đã được chỉ định.

Cách thức hoạt động của Cronjob

Có 2 khái niệm các bạn cần nắm ở đây:

  • cron hoặc crond, đó là tiến trình nền (daemon).
  • crontab đó là lệnh cho phép bạn chỉnh sửa các cron.

crond là một tiến trình chạy nền của hệ điều hành linux và nó không tương tác với người dùng. Tức là chương trình này sẽ không nhận input và cũng không hiện ra output cho người dùng.

Tiến trình nền sẽ chạy dưới user root. Bạn có thể chạy lệnh ps để kiểm tra xem cron có đang chạy không:

ps aux | grep crond

Kết quả trả ra:

Nếu như không có kết quả trả ra thì bạn cần phải cài đặt cron bằng lệnh:

$ sudo apt update && sudo apt install cron

Sau khi cài đặt các bạn dùng lệnh sau để bật cron lên:

$ sudo systemctl enable crond.service

Tạo Cronjob

Bước 1: Cấu hình cron cơ bản

Cấu hình một cron cơ bản như sau

*    *    *    *    *   /home/user/bin/somecommand.sh
|    |    |    |    |            |
|    |    |    |    |    Command or Script to execute
|    |    |    |    |
|    |    |    | Day of week(0-6 | Sun-Sat)
|    |    |    |
|    |    |  Month(1-12)
|    |    |
|    |  Day of Month(1-31)
|    |
|   Hour(0-23)
|
Min(0-59)

Cấu hình này chia làm 2 phần

  • 5 dấu * đầu tiên sẽ thể hiện cho thời gian bạn muốn chạy chương trình. Ở đây 5 dấu * thể hiện lần lượt cho:
    • phút (0-59)
    • giờ (0-23)
    • ngày trong tháng (1-31)
    • Tháng trong năm (1-12)
    • Ngày trong tuần (0-6 hoặc Sun-Sat)
  • Phần đằng sau là câu lệnh hoặc script bạn muốn chạy

Về phần thời gian được hiểu là thời điểm hoặc chu kì bạn muốn chạy lệnh hoặc script đã soạn. Ví dụ nư bạn muốn chạy tác vụ vào lúc 12h hằng ngày thì bạn sẽ set câu lệnh như sau:

0 12 * * * /home/user/bin/somecommand.sh

Trong ví dụ, dấu * đầu tiên được thay thế bằng số phút là 0p và dấu * thứ 2 được thay thế bằng 12 thể hiện cho giờ, các dấu * còn lại không được thay thế tức là bất kể giá trị nào cũng được. Ở đây 3 dấu * này biểu hiện cho ngày trong tháng, tháng trong năm và ngày trong tuần vì vậy ta hiểu là bất cứ ngày nào cũng được, cứ đúng lúc 12:00 sẽ chạy command hoặc script đó.

Ở phần tời gian bạn có thể sử dụng dấu ( – ) cho khoảng thời gian chạy lệnh hoặc dấu ( / ) để biểu hiện các bước nhảy thời gian. Ví dụ:

0 */12 * * Mon-Tue   /home/user/bin/somecommand.sh

Ở ví dụ trên, thời gian */12 tức là cứ 12 tiếng 1 lần. Mon-Tue là thứ 2 tới thứ 3. Như vậy lệnh sẽ được chạy vào các ngày thứ 2 và thứ 3 và cứ 12 tiếng sẽ chạy 1 lần.

Bước 2: Cấu hình vào crontab

Để cấu hình đưa cron vào crontab ta gõ lệnh:

$ crontab -e

sau đó lấy cấu hình cron vừa tạo ở bước trên và paste vào trong crontab và save lại.

Bạn cần phải restart lại daemon crond để nhận cấu hình crontab mới. Sử dụng lệnh:

$ sudo systemctl restart crond.service

 

Test Cronjob với script đơn giản

Trong bài viết này mình sẽ tạo ra một script đơn giản đó là test ping 8.8.8.8 vào mỗi phút và ghi kết quả và ngày giờ vào 1 file text để kiểm tra.

Bước 1: Tạo bash script

Đầu tiên mình sẽ tạo một bash script đơn giản trước:

#!/bin/bash

# Run ping command and save output to a text file
ping -c 1 8.8.8.8 >> /ping_output.txt
date >> /ping_output.txt
echo "Ping completed. Output saved to ping_output.txt"

Script sẽ chạy 1 lệnh ping tới 8.8.8.8 sau đó ghi kết quả vào file text có tên ping_output.txt

Sau đó sẽ chạy thêm lệnh date để kiểm tra ngày giờ và ghi thời gian vào ping_output.txt

 

Sau khi đã có đoạn code, chúng ta sẽ tạo ra một file bash script sau đó paste vào

Tạo file bash script và để trong thư mục / bằng lệnh:

touch /ping_test.sh

Paste đoạn script trên vào file bằng cách:

vim /ping_test.sh

sau đó paste đoạn script vào và save file lại. Các bạn nhấn lần lượt các phím esc :wp! enter để lưu lại nhé!

Lưu ý: tại đây các bạn phải thay đổi quyền excute script để cron có thể chạy được script này.

chmod +x /ping_test.sh

OK! Vậy là giờ chúng ta đã có file bash script. Tiếp theo sẽ tạo cronjob

 

Bước 2: Tạo cronjob

Ở bước này các bạn ghi ra file text thôi nhé. Mọt sẽ tạo cronjob chạy script ping_test.sh mỗi 1 phút 1 lần

* * * * * /ping_test.sh

 

Bước 3: Add cronjob vào crontab

Để add cronjob vào crontab mình sẽ dùng lệnh crontab -e

Sau đó paste cronjob vừa tạo ở trên

Các bạn nhấn lần lượt các phím esc :wp! enter để lưu crontab lại nhé!

Bước 4: Khởi động lại daemon crond để chạy

$ sudo systemctl restart crond.service

Bước 5: Để cron làm nốt phần việc còn lại thôi nào!

 

Log của crond.service ở trong file /var/log/cron . Các bạn có thể kiểm tra bằng lệnh cat nhé.

Kết luận

Trên thực tế, ta có thể sử dụng cronjob cho rất nhiều tác vụ. Các bạn có thể viết các bash script phức tạp với nhiều tác vụ và câu lệnh hơn để có thể thực hiện được nhiều tác vụ hơn nữa. Lưu ý: cần kiểm thử trước các bash script thật kỹ càng vì có thể ảnh hưởng tới các hệ thống. Ở các bài viết sau mình sẽ đi sâu hơn vào cách tạo các bash script phức tạp hơn. Chúc các bạn thành công!

Nguồn: motpc.com

5 1 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest
0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận
0
Rất thích suy nghĩ của bạn, hãy bình luận.x
()
x