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é !
Nội dung chí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
Bài viết liên quan
Backup a folder daily with Shell script