Kiểm tra các cronjob chạy trên server linux
Giới thiệu Cron, crontabMột chức năng giống như Microsoft Task Scheduler, nó cho phép bạn chạy các tác vụ theo một lịch biểu (có thể một lần, lặp lại nhiều lần) theo phút, giờ, ngày, tuần, tháng. Thành phần đó trong Linux là crontab (viết tắt của chronograph table). Nó dựa vào đồng hồ hệ thống xác định thời điểm phù hợp thi hành các tác vụ được cấu hình chạy. Thường sử dụng crontab để chạy các lệnh, các script nhẹ với mục đích bảo trì hệ thống, ví du như định kỳ hàng tuần xóa các file log cũ sinh ra bởi httpd, định kỳ cập nhật phần mềm ... Show
Kiểm tra trạng thái dịch vụ cron có đang chạy không# Trên CentOS systemctl status crond # Trên Ubuntu systemctl status cron Để
dừng, chạy, khởi động lại sử dụng các lệnh: Kiểm tra các crontabCác crontab (các tác vụ cần chạy theo lịch) được thiết lập chạy cho từng User, để liệt kê xem User hiện tại (đang login) có các crontab nào sử dụng lệnh sau crontab -l Biên tập crontabMặc định thì lưu trữ tại Hoặc vào ngay soạn thảo các crontab cho user hiện tại bằng lệnh: crontab -e Ở màn hình soạn thảo, bạn biên tập các dòng crontab theo cấu trúc trình bày phần dưới, sau đó lưu lại và thoát ra, nếu cú pháp khai báo không có lỗi gì thì các crontab được cài đặt và lên lịch thực hiện Tìm hiểu định dạng các dòng CrontabMỗi dòng crontab có định lưu các số liệu sau:
*[phút] *[giờ] *[ngày trong tháng] *[tháng] *[thứ] [lệnh chạy (script hoặc lệnh linux)] Vậy mỗi dòng thường có 6 cột dữ liệu, 5 cột đầu để xác định thời điểm chạy (thời gian). Cột thứ 6 là lệnh chạy (thường là một script). Các cột thời gian, loại thời gian nào luôn xảy ra để dấu Ví dụ: Cứ đến phút 30 hàng giờ thì chạy script tên là /script/abc.sh thì cấu trúc như sau: Điền số 30 vào cột phút, các cột giờ, ngày, tháng, thứ điền * vì xảy ra mọi giờ, mọi ngày, mọi tháng. Vậy dòng crontab phù hợp như sau: 30 * * * * /script/abc.sh Tương tự như vậy xem một số ví dụ sau: #Chạy vào lúc 3 giờ hàng ngày 0 3 * * * /script/abc.sh #Chạy vào lúc 17h ngày chủ nhật hàng tuần 0 17 * * sun /scripts/abc.sh #Cứ 8 tiếng là chạy 0 */8 * * * /scripts/abc.sh #Cứ 30 phút chạy một lần */30 * * * * /script/abc.sh Ngoài ra còn một số dạng tắt: Chạy hàng tháng @monthly /scripts/abc.sh Chạy hàng tuần @weekly /bin/script.sh Chạy hàng ngày @daily /scripts/script.sh Kiểm tra database và tự sửa chữa.Mysql nhiều khi bị crash database và cần repair, tạo một script làm việc này và chạy vào 3h sáng hàng ngày. Làm như sau: Tạo một script tên là rpairdb.sh với nội dung như sau #!/bin/bash mysqlcheck -u{username} -p{password} --auto-repair --check --all-databases Trong đó {username} : điền tài khoản admin của mysql; {password} thay bàng password. Sau đó gõ lệnh crontab -e Thêm vào một dòng với nội dung * 3 * * * /rpairdb.sh Lưu lại là xong. Cứ 30 phút là chạy một script trong file .phpGiả sử bạn có file PHP, lưu tại /home/user/run30.php, trong đó có các code php mà bạn muốn chạy cứ 30 phút một lần bạn làm tương tự như trên và thêm vào crontab */30 * * * * php /home/user/run30.php Bạn có một trang web và bạn muốn sao lưu toàn bộ dữ liệu website hàng ngày một cách tự động? Hoặc bạn cần renew chứng chỉ SSL cứ sau 3 tháng một lần? Nếu bạn làm bằng tay có khi quên lúc nào không hay. Tất cả những tác vụ cần thực hiện tự động vào một thời điểm nào đó thì đều có thể làm tự động. Linux có một cơ chế lập lịch để thực hiện các tác vụ tự động gọi là Cron. Khái niệm cron trong Linux cũng tương tự như Alarm trong Android, hay Task Schedule trên Window vậy. Mình là người cũng rất hay sử dụng crontab để thực hiện những tác vụ tự động. Đơn giản vì mình lười nên mình ghét làm thủ công. Bài viết này mình sẽ chia sẻ toàn bộ kiến thức cũng như hướng dẫn sử dụng crontab để bạn có thể làm chủ được công cụ hữu ích này. Chúng ta bắt đầu nhé! Sử dụng crontab trên VPSNội dung chính của bài viết
#Crontab là gì?Cron là cách để tạo và thực hiện các tác vụ theo một lịch trình định kì ở chế độ nền. Trong đó, Cron job là tập hợp các tác vụ cần thực hiện. Crontab là nơi lưu trữ các cronjob, trên linux cũng có sẵn một chương trình cũng có tên là crontab để chỉnh sửa lịch trình. Về ứng dụng của crontab thì nhiều vô kể, và hầu như ứng dụng nào cũng có sử dụng đến crontab. Bạn cũng có thể sử dụng nó để tự động sao lưu, đồng bộ, cập nhật dữ liệu cho website. Giả sử hàng ngày vào lúc 00:00 bạn muốn copy một file log từ server về máy local của bạn để hôm sau báo cáo cho sếp (tất nhiên server này bạn cần thiết lập kết nối SSH trước đó rồi). Đây là lúc cần đến crontab. Thêm một ví dụ nữa nhé! Lấy luôn trang web này (VNTALKING), mình rất hay viết bài và lên lịch để xuất bản bài viết vào đúng 9 giờ sáng thứ 3 hàng tuần. Tính năng Schedule của wordpress đã giúp mình thực hiện điều đó một cách dễ dàng mà không phải ngồi canh đến giờ mới nhấn nút publish bài viết. Vì vậy, mình có thể viết hàng loạt bài viết rồi lên lịch để publish bài từ từ 🙂 Tất nhiên bạn có thể làm việc đó thủ công nhưng dựa vào Crontab bạn có thể làm việc đó tự động dễ dàng không tốn một giọt mồ hôi nào cả. Một crontab là một tệp văn bản đơn giản chứa danh sách các lệnh có nghĩa và được chạy tại các thời điểm được chỉ định. Nó được chỉnh sửa bằng lệnh crontab. Các lệnh trong file crontab được kiểm tra bởi trình cron daemon và thực thi chúng trong nền hệ thống. Các bạn lưu ý nhé: File crontab không thể được chỉnh sửa bởi bất kỳ ứng dụng file editor nào. Chỉ duy nhất nhất lệnh crontab là có thể sửa nó. Có lẽ cơ chế này đảm bảo hệ thống kiểm soát tốt lịch trình. Một số lệnh thường dùng: - 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 - cd /etc/cron.d : Nếu crobtab được register bằng system cron Mỗi người dùng (bao gồm cả root) đều có một tệp crontab. Cron daemon kiểm tra tệp crontab của người dùng bất kể người dùng có thực sự đăng nhập vào hệ thống hay không. Phần lớn VPS của các nhà cung cấp nổi tiếng như Linode, Vultr, DO… đều cài sẵn crontab sau khi khỏi tạo một VPS mới. Tuy nhiên, với bạn nào sử dụng Dedicated server, tự cài đặt OS từ đầu thì có thể phải cài đặt thêm crontab. Cài đặt CrobtabĐể cài đặt crontab trên Linux cũng rất đơn giản, chỉ một câu lệnh là xong. Trên Ubuntu/Debian: sudo apt-get install cron Trên CentOS/Red Hat Linux: yum install cronie Sau khi cài đặt xong, thử kiểm tra xem nó đã cài đặt thành công rồi hay chưa bằng lệnh: service crond status Nếu output như dưới đây thì là OK. crond (pid 4370) is running... Nếu crontab vẫn chưa chạy thì bạn tự khởi động crontab và thiết lập tự động chạy mỗi khi reboot như sau: service crond start chkconfig crond on #Cấu trúc của CrontabMột lệnh crobtab thường gồm 3 phần:
* * * * * user-name command to be executed - - - - - | | | | | | | | | +----- day of week (0 - 6) (Sunday=0) | | | +------- month (1 - 12) | | +--------- day of month (1 - 31) | +----------- hour (0 - 23) +------------- min (0 - 59) Ví dụ: Nếu bạn để cả 5 chỉ số thời gian là * thì có nghĩa là tác vụ của bạn sẽ chạy từng phút. * * * * * /bin/execute/this/script.sh Bất kì trường thời gian nào nếu bạn để là * thì có nghĩa trường đó sẽ chạy every ~(Every minute, every day …) Ví dụ: Chạy script 30 phút 1 lần 0,30 * * * * /bin/execute/this/script.sh – Chạy script 15 phút 1 lần: 0,15,30,45 * * * * /bin/execute/this/script.sh Hoặc bạn có thể viết ngắn gọn như sau(Con đường nào cũng ra Hà Nội thui nên nếu bạn không biết viết lệnh crobtab ngắn gọn thì cứ sách vở mà triển khai) */15 * * * * /bin/execute/this/script.sh – Chạy script vào 3 giờ sáng mỗi ngày: 0 3 * * * /bin/execute/this/script.sh Nếu bạn cảm thấy nhớ mấy quy tắc này nó rườm rà, phức tạp thì có thể sử dụng tool để nó tự động gen cho bạn. Việc của bạn là copy nó vào crontab là xong. Công cụ gen crontab tự động: Crontab Generator Một số lệnh crontab phổ biếnBạn có thể sử dụng các từ khóa đặc biệt để thay cho thời gian cụ thể như sau: @reboot Run once, at startup @yearly Run once a year "0 0 1 1 *" @annually (same as @yearly) @monthly Run once a month "0 0 1 * *" @weekly Run once a week "0 0 * * 0" @daily Run once a day "0 0 * * *" @midnight (same as @daily) @hourly Run once an hour "0 * * * *" Ví dụ: thực hiện script.sh hàng ngày vào lúc 0 giờ, 0 phút. @daily /bin/execute/this/script.sh #Tắt tính năng gửi mail mỗi khi chạy crontabMặc định cron gửi email cho quản trị viên mỗi khi 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/script.sh >/dev/null 2>&1 #Tạo log fileNhiều khi bạn muốn lưu lại log để khi kiểm tra xem việc crontab chạy có đúng ý hay không. Để lưu log vào file bạn làm như sau: @daily /bin/execute/this/script.sh > /home/username/cronlogs/script_output.log #Tạm kếtNhư vậy là mình đã hoàn thành bài viết tổng hợp những kiến thức cơ bản về sử dụng crontab trong linux. Giờ thì bạn đã biết crontab là gì, cơ chế hoạt động của crontab, cũng như cách sử dụng crontab… Mình hi vọng bài viết này có ích với bạn, đặc biệt là các bạn quản trị server, admin của website. Tiếp tục ủng hộ mình nhé, hãy share bài viết nếu thích 🙂 |