Thứ Ba, 20 tháng 4, 2021

Hướng dẫn sử dụng Crontab Linux/Unix

1. Crontab là gì

Tương tự như với Windows, Linux cũng có cách để tạo và chạy các lệnh theo một chu kỳ xác định.


Ở Windows nó gọi là Task Schedule, còn với Linux là Cron.

Cronjob là các lệnh thực thi hành động đặt trước vào thời điểm nhất định. Crontab là nơi lưu trữ các cronjob

Cron là một tiện ích giúp lập lịch chạy những dòng lệnh bên phía server để thực thi một hoặc nhiều công việc nào đó theo thời gian được lập sẵn. Một số người gọi những công việc đó là Cron job hoặc Cron task.

Cron là một chương trình deamon, tức là nó được chạy ngầm mãi mãi một khi nó được khởi động lên. Như các deamon khác thì bạn cần khởi động lại nó nếu như có thay đổi thiết lập gì đó. Chương trình này nhìn vào file thiết lập có tên là crontab để thực thi những task được mô tả ở bên trong.

Bình thường thì những người quản trị server sẽ rất hay dùng đến tiện ích này, nhưng những web developer thì sao? Họ đôi khi cũng cần đến những chức năng kiểu lập lịch này. Ví dụ :

  • Bạn hoàn toàn có thể cài đặt để cron job thực thi việc quét xem những user trial nào đã bị expired và delete hoặc set inactive tài khoản của họ.
  • Gửi đi những email tới user sử dụng hệ thống hàng ngày hay hàng tuần ...
  • Xoá bỏ những file cache hàng tháng khi nó quá lớn
  • Kiểm tra hàng ngày xem những link nào của website bị hỏng hay không để nhanh chóng khắc phục
  • Backup cơ sở dữ liệu

2. Cơ chế làm việc của Cron?

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, trừ phi bạn dùng lệnh crontab.

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

Hầu hết tất cả VPS/Server đề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.

 

3. 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

File cấu hình của crontab

Solaris:
bash-3.00$ ls /var/spool/cron/crontabs/
adm     lp      oracle  root    sys     uucp
Linux:
[root@dbaviet02 ~]# ls  /var/spool/cron/
oracle  root 

4. Cấu trúc của 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
-     -     -     -     -
|     |     |     |     |
|     |     |     |     +----- day of week (0 - 6) (Sunday=0)
|     |     |     +------- month (1 - 12)
|     |     +--------- day of month (1 - 31)
|     +----------- hour (0 - 23)
+------------- min (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
0,30 * * * * iostat -xnd 1 100 >> /tmp/iostat_2021.log

– 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

5. Ví dụ cụ thể

Giả sử mình viết một đoạn script sao lưu toàn bộ thư mục /home/domain.com/public_html/ và chuyển file nén .zip vào thư mục /root/ như sau:

#!/bin/bash
zip -r /root/backup_domain.com_$(date +"%Y-%m-%d").zip /home/domain.com/public_html/ -q

Script này lưu lại ở đường dẫn /etc/backup.sh (gán quyền execute – chmod +x nếu là bash script).

Sau đó mình cho script này chạy định kỳ vào 15h thứ Hai và thứ Năm hàng tuần 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:

--15h thứ Hai và thứ Năm hàng tuần

0 15 * * 1,4 sh /etc/backup.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: EDITOR=nano crontab -e

Ví dụ khác

– Để crontab chạy mỗi phút một lần:

* * * * * sh /etc/backup.sh

– Để crontab chạy 24h một lần (vào nửa đêm):

0 0 * * * sh /etc/backup.sh

– Để crontab chạy file PHP 24h một lần:

0 0 * * * /usr/bin/php /var/www/html/reset.php
#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

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

6. 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

7. Tạo log file

Để lưu log vào file:

30 18 * * * rm /home/someuser/tmp/* > /home/someuser/cronlogs/clean_tmp_dir.log

8. Troubleshoot crontab để check xem có chạy hay không

Linux: # /var/log/cron

Unix: #/var/cron/log

9. QUẢN LÝ SERVICE CRON

RHEL/Fedora/CentOS:

  1. Start cron service

    • To start the cron service, use: /etc/init.d/crond start

    • OR RHEL/CentOS 5.x/6.x user: service crond start

    • OR RHEL/Centos Linux 7.x user: systemctl start crond.service

  2. Stop cron service

    • To stop the cron service, use: /etc/init.d/crond stop

    • OR RHEL/CentOS 5.x/6.x user: service crond stop

    • OR RHEL/Centos Linux 7.x user: systemctl stop crond.service

  3. Restart cron service

    • To restart the cron service, use: /etc/init.d/crond restart

    • OR RHEL/CentOS 5.x/6.x user: service crond restart

    • OR RHEL/Centos Linux 7.x user: systemctl restart crond.service

Ubuntu/Mint/Debian:

  1. Debian Start cron service

    • To start the cron service, use: /etc/init.d/cron start

    • OR sudo /etc/init.d/cron start

    • OR sudo service cron start

  2. Debian Stop cron service

    • To stop the cron service, use: /etc/init.d/cron stop

    • OR sudo /etc/init.d/cron stop

    • OR sudo service cron stop

  3. Debian Restart cron service

    • To restart the cron service, use: /etc/init.d/cron restart

    • OR sudo /etc/init.d/cron restart

    • OR sudo service cron restart

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
hoặc
https://bit.ly/oaz_fp

=============================
học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,khóa học pl/sql, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle dataguard, oracle goldengate, oracle weblogic, oracle exadata, hoc solaris, hoc linux, hoc aix

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master