Warning: wp_hide_post_Public::query_posts_join(): Argument #2 ($wp_query) must be passed by reference, value given in /home/nginx/domains/thachpham.com/public/wp-includes/class-wp-hook.php on line 324

Warning: wp_hide_post_Public::query_posts_join(): Argument #2 ($wp_query) must be passed by reference, value given in /home/nginx/domains/thachpham.com/public/wp-includes/class-wp-hook.php on line 324

Warning: wp_hide_post_Public::query_posts_join(): Argument #2 ($wp_query) must be passed by reference, value given in /home/nginx/domains/thachpham.com/public/wp-includes/class-wp-hook.php on line 324

Warning: wp_hide_post_Public::query_posts_join(): Argument #2 ($wp_query) must be passed by reference, value given in /home/nginx/domains/thachpham.com/public/wp-includes/class-wp-hook.php on line 324

Warning: wp_hide_post_Public::query_posts_join(): Argument #2 ($wp_query) must be passed by reference, value given in /home/nginx/domains/thachpham.com/public/wp-includes/class-wp-hook.php on line 324

Warning: wp_hide_post_Public::query_posts_join(): Argument #2 ($wp_query) must be passed by reference, value given in /home/nginx/domains/thachpham.com/public/wp-includes/class-wp-hook.php on line 324
Tự viết script backup và sử dụng crontab trong Linux
Trang chủ Hosting - Domain Backup & Restore WordPress trên VPS – Tự viết script backup

Backup & Restore WordPress trên VPS – Tự viết script backup

bởi Thạch Phạm
4 bình luận 5,5K views

Tham gia nhóm hỗ trợ WordPress

Tham gia nhóm Hỗ trợ Server - Hosting & WordPress để cùng nhau hỏi đáp và hỗ trợ các vấn đề về WordPress, tối ưu máy chủ/server.

Tham gia ngay

Warning: wp_hide_post_Public::query_posts_join(): Argument #2 ($wp_query) must be passed by reference, value given in /home/nginx/domains/thachpham.com/public/wp-includes/class-wp-hook.php on line 324

Warning: wp_hide_post_Public::query_posts_join(): Argument #2 ($wp_query) must be passed by reference, value given in /home/nginx/domains/thachpham.com/public/wp-includes/class-wp-hook.php on line 324
Bài này thuộc phần 3 của 4 phần trong serie Backup & Restore WordPress trên máy chủ

Như trong phần 2 của serie này mình đã hướng dẫn, nếu khi backup chúng ta sẽ phải gõ thủ công như vậy, nên có thể nó hơi mất thời gian và bạn sẽ cần một giải pháp chuyên nghiệp hơn là làm thủ công.

Nếu bạn cần một giải pháp khác tốt hơn là gõ từng câu lệnh thủ công thì ở bài này mình sẽ hướng dẫn các bạn tự viết một Shell script để thực hiện công việc backup để khi nào cần backup, bạn chỉ cần gõ một câu lệnh nào đó mà bạn tự đặt ra thay vì sử dụng các lệnh thủ công.

Hơn nữa, cũng trong bài này mình sẽ hướng dẫn bạn cách đưa một Shell script bạn tự viết vào crontab để công việc backup diễn ra hoàn toàn tự động, như backup 1 ngày 1 lần chẳng hạn.

Nên xem trước: Học VPS căn bản

Khuyến mãi Black Friday

I. Giới thiệu về Shell Script

Shell Script là một ngôn ngữ lập trình kịch bản được thiết kế dành cho môi trường UNIX. Chẳng hạn bạn hay sử dụng các lệnh như cd, unzip,…tất cả lệnh đó đều là Shell script.

Chẳng hạn như bạn cần backup một thư mục nào đó và chuyển file backup đến một thư mục chỉ định, đồng thời xóa các file backup cũ thì nếu bạn tự gõ các lệnh đó thủ công thì bạn sẽ cần gõ khoảng 4, 5 lần. Tuy nhiên với ngôn ngữ Shell, bạn có thể lồng các tác vụ đó vào một file Shell script để khi cần làm việc kia thì bạn chỉ cần gõ một lệnh mà bạn đã đặt ra.

II. Cách viết Shell script để backup dữ liệu

Ở trong bài này mình sẽ không thể hướng dẫn bạn hết các câu lệnh trong Shell script mà sẽ chỉ hướng dẫn bạn cách viết một script backup dữ liệu mà thôi, nhưng hy vọng là bạn có thể ứng dụng nó vào các việc khác tốt hơn. Khi nào có thời gian, mình sẽ làm một serie về Shell script.

Để viết một Shell script, bạn có thể viết thẳng trên VPS bằng bộ gõ vi trên máy chủ hoặc phần mềm Trelby vì các editor mặc định ở Windows khi save file lại sẽ không đúng định dạng của UNIX.

2.1) Kịch bản của script

Trước khi lập trình thì dĩ nhiên ta phải nghĩ sẵn 1 kịch bản trong đầu. Để code trở nên dễ hiểu thì mình sẽ có một kịch bản như sau:

Gõ lệnh tên là tpbackup với cấu trúc sau để backup:

[bash]tpbackup [thư mục cần backup] [thư mục cần lưu][/bash]

Sau khi gõ xong, hệ thống sẽ hiển thị thông báo đang backup và xuất ra dữ liệu bao gồm đường dẫn lưu file backup và tên file backup.

2.2) Bắt đầu viết script

Đầu tiên là bạn tạo ra một file với tên tpbackup trong thư mục /bin:

[bash]vi /bin/tpbackup[/bash]

và bắt đầu viết các đoạn dưới đây:

[bash]

#!/ bin/bash

# Thiet lap bien (variables) can thiet
backup_folder=$1
dest_folder=$2

[/bash]

Trong đó, dòng #! /bin/bash nghĩa là giúp UNIX xác định code của bạn sẽ được chạy bằng chương trình nào, ở đây ta sẽ dùng bash.

Ở  dưới mình có 2 biến là backup_folder (thư mục cần backup) và dest_folder (thư mục cần lưu file). Cả 2 biến này đều có giá trị là $1$2, hai giá trị này nghĩa là tham số mà bạn sẽ truyền vào khi gõ lệnh. Ví dụ lệnh của mình là:

[bash]tpbackup /home /tmp thachpham[/bash]

Thì cái /home chính là tham số $1/tmp là tham số $2. Sở dĩ chúng ta nên sử dụng tham số thay vì định nghĩa giá trị tĩnh là sau này nếu cần backup thư mục nào đó thì khỏi cần tạo một script mới.

Tiếp tục, chúng ta tạo thêm 2 biến nữa như sau:

[bash]

# Thiet lap bien cua ten file backup
ngay=$(date +%d-%m-%Y) ## Định hình cấu trúc ngày tháng kiểu DD-MM-YYYY (31/05/2014)
file_name="backup-$ngay" # Tên file sẽ có dạng backup-31-05-2014

[/bash]

2 đoạn trên nghĩa là chúng ta khởi tạo cấu trúc tên file của backup để tránh bị trùng.

Tiếp tục viết đoạn sau:

[bash]

# Quy trinh backup
echo "Dang tien hanh backup du lieu tai $backup_folder va se duoc gui den $dest_folder"
echo

zip -r $dest_folder/$file_name $backup_folder > /dev/null

# Hien thi thong bao sau khi backup xong
echo
echo "BACKUP THANH CONG!"
echo "Ten file backup: $file_name"
echo "File backup da duoc luu tai: $dest_folder"
ls -al $dest_folder
cd ~
echo

[/bash]

Đoạn trên nghĩa là nó sẽ in ra tin nhắn cho biết hệ thống đang tiến hành backup và hành động ở đây là lệnh zip. Sau khi lệnh zip chạy xong, nó sẽ tiếp tục chạy các đoạn echo ở dưới để hiển thị thông báo.

Cuối cùng là lưu file này lại và CHMOD cho nó:

[bash]

chmod 755 /bin/tpbackup

[/bash]

Ok, bây giờ hãy thử gõ lệnh tpbackup kèm theo thư mục cần backup và thư mục cần lưu giống thế này:

[bash]tpbackup /home/webdata/thachpham.com/public_html /home[/bash]

Kết quả trả về:


[root@hocvps ~]# tpbackup /home/webdata/thachpham.com/public_html/ /home
Dang tien hanh backup du lieu tai /home/webdata/thachpham.com/public_html/ va se duoc gui den /home

BACKUP THANH CONG!
Ten file backup: backup-24-09-2014
File backup da duoc luu tai: /home
total 46584
drwxr-xr-x 3 root root 4096 Sep 24 14:57 .
dr-xr-xr-x 22 root root 4096 Sep 24 13:27 ..
-rw-r–r– 1 root root 47687224 Sep 24 14:57 backup-24-09-2014.zip
drwxr-xr-x 3 apache apache 4096 Sep 24 07:08 webdata

Xong rồi đấy :D. Bây giờ nếu bạn cần backup thì cứ chạy lệnh tpbackup và gõ đường dẫn cần lưu và đường dẫn cần backup vào là xong.

Toàn bộ code của script:

[bash]

#! /bin/sh
#
# Thiet lap bien (variables) can thiet
backup_folder=$1
dest_folder=$2

# Thiet lap bien cua ten file backup
ngay=$(date +%d-%m-%Y) ## Dinh hinh cau truc ngay thang kieu DD-MM-YYYY (31/05/2014)
file_name="backup-$ngay" # Ten file se co dang backup-31-05-2014

# Quy trinh backup
echo "Dang tien hanh backup du lieu tai $backup_folder va se duoc gui den $dest_folder"
echo
zip -r $dest_folder/$file_name cd $backup_folder > /dev/null

# Hien thi thong bao sau khi backup xong
echo
echo "BACKUP THANH CONG!"
echo "Ten file backup: $file_name"
echo "File backup da duoc luu tai: $dest_folder"
ls -al $dest_folder
cd ~
echo

[/bash]

Nếu bạn cảm thấy hứng thú với Shell script thì có thể tự học tại Linux Shell Script Tutorial.

III. Tạo Cron Job để tự backup

Cron Job nghĩa là khái niệm chỉ một hành động nào đó được lặp đi lặp lại theo một chu kỳ nhất định. Ở bài này mình sẽ không giải thích rõ Cron Job là gì nên mình chỉ nói về việc sử dụng Cron Job để máy chủ tự động backup theo chu kỳ nhất định.

Lưu ý: Nên sử dụng tài khoản root để tạo cron.

Để tạo Cron Job, bạn hãy gõ lệnh sau:

[bash]crontab -e[/bash]

Ấn phím i để chuyển qua chế độ Insert và gõ:

[bash]* 15 * * * zip -r /home/thachpham.zip /home/webdata/thachpham.com/public_html/[/bash]

Mình có mô hình giải thích như sau:

[bash]
* 15 * * * zip -r /home/thachpham.zip /home/webdata/thachpham.com/public_html/
# # # # # ########################################
| | | | | \———————————- Lệnh sẽ chạy khi cron job kích hoạt
| | | | \———-Ngày trong tuần (0-7)
| | | \———— Tháng (1-12)
| | \—————Ngày trong tháng (1-31)
| \—————– Giờ (1-24)
\——————- Phút (1-59)
[/bash]

Như vậy, đoạn ở trên nghĩa là nó sẽ chạy đoạn lệnh tpbackup sau giờ thứ 15 (3h chiều) mỗi ngày.

Gõ xong ấn phím ESC và gõ :wq! để lưu lại và thoát ra.

Để kiểm tra xem bạn đã thêm cronjob thành công hay chưa, hãy gõ lệnh xem nội dung của file /var/spool/cron/root:

[bash]cat /var/spool/cron/root[/bash]

Nếu nó hiện ra cái cronjob mà bạn vừa thêm thì thành công.


[root@hocvps log]# cat /var/spool/cron/root
00 15 * * * zip -r /home/thachpham.zip /home/webdata/thachpham.com/public_html/

Để kiểm tra xem cron có chạy hay không, bạn cứ thay 00 15 * * * thành */1 ** * * * nghĩa là một phút nó chạy một lần. Sau đó chạy lệnh tail -f /var/log/cron để xem cronjob rồi đợi một phút xem nó có chạy hay không.


Sep 24 15:48:01 hocvps CROND[3253]: (root) CMD (zip -r /home/thachpham.zip /home/webdata/thachpham.com/public_html/)

Bạn có thể tùy biến thêm cái này nhé. :D

Tips: Bạn có thể sử dụng công cụ Crontab Code Generator để hỗ trợ tạo crontab nhanh và chính xác.

Lời kết

Ở bài này tuy là mình tập trung vào phần backup dữ liệu nhưng cũng có pha thêm một chút về Shell scripting vì biết đâu được bạn sẽ hứng thú với nó. :D

Tuy vậy, việc này vẫn còn khá thủ công vì bạn cũng cần phải làm nhiều bước. VẬy thì hãy đọc tiếp phần tiếp để có giải pháp tối ưu nhất.

Đánh giá nội dung này
4 bình luận

Warning: wp_hide_post_Public::query_posts_join(): Argument #2 ($wp_query) must be passed by reference, value given in /home/nginx/domains/thachpham.com/public/wp-includes/class-wp-hook.php on line 324

Có thể bạn quan tâm

Hiện tại blog tạm đóng bình luận vì mình cần tập trung thời gian vào cập nhật bài viết. Bình luận sẽ mở ra cho đến khi mình sẵn sàng.