Header Ads Widget

Ticker

6/recent/ticker-posts

Tạo Script tự động sync với Git Repo trên Ubuntu và quản lý script services bằng pm2

Keywords: How to create script auto sync git repo on ubuntu

Hiện nay có rất nhiều ứng dụng cloud để chúng ta lựa chọn cho việc lưu trử cũng như là thực hiện backup hoặc restore, trong đó mạnh nhất có lẽ là Google Drive và Dropbox v.v nhưng mình thấy 2 thằng này đặc biệt là Google Drive hổ trợ khá tốt cho Windows, còn Dropbox lại hổ trợ khá tốt cho Ubuntu, vậy tại sao mình lại nói như thế vì với Google Drive thì hiện tại nó có một bản Setup Auto Sync dành riêng cho Windows nghĩa là những thư mục nào hay là data nào ở folder đó đều sẻ tự động sync đến Google Drive cũng như là các thứ ngoài màn hình Desktop và Documents, với Dropbox cũng vậy nhưng nó lại hỗ trợ không chỉ trên Windows không mà còn Ubuntu nữa.

Còn lại thật sự thì mình vẫn chưa tìm hiểu ra thằng nào ngon hơn Dropbox dành cho Ubuntu cả, nhưng lạ thay là do dung lượng lưu trữ của Dropbox chỉ võn vẹn 2GB nên vì thế mình thật sự không thoải mái khi sử dụng cũng như là việc sử dụng cảm giác khó chịu và cũng nhiều vấn đề khác nữa nên vì vậy mình quyết định tìm ra một giải pháp services sync khác ngoài Dropbox ra để có thể lưu nhiều hơn thế là mình quyết định chọn Git để giải quyết vấn đề này, đầu tiên là trên Git mình sẻ tạo cho bản thân một Repo với tên gọi bất kỳ ví dụ Backup đi chẳng hạn, ở đây ví dụ trong bài viết này thì mình sử dụng Gitlab nhé các bạn, các bạn cũng có thể sử dụng Github và làm tương tự cũng không sao cả

Sau khi tạo xong mình sẻ thực hiện Clone Git về máy Ubuntu nhé, ak khoan để tránh trường hợp cứ mõi lần Clone Git về thì lại phải nhập Password và User của Git mình sẻ thực hiện chạy câu lệnh sau để save tài khoản git vào trong một file config của nó

git config --global credential.helper store

Ok sau khi đã chạy lệnh trên xong rồi thì thực hiện clone git về lần đầu tiên khi clone nó sẻ yêu cầu hỏi nhưng yên tâm lần sau khi bạn push hoặc pull git về thì việc này sẻ không xuất hiện lần nào nữa

Như các bạn đã thấy mình đã thực hiện Clone Git về thành công rồi đấy, giờ đây mình sẻ thực hiện tạo một con script-backup.sh với nội dung như sau để chạy ngầm nó như là một services các bạn nhé
#!/bin/bash

set -e

TARGETDIR="/root/backup/"

stderr () {
    echo "$1" >&2
}

is_command() {
    command -v "$1" &>/dev/null
}

if [ "$(uname)" != "Darwin" ]; then
    INW="inotifywait";
    EVENTS="close_write,move,delete,create";
    INCOMMAND="\"$INW\" -qr -e \"$EVENTS\" --exclude \"\.git\" \"$TARGETDIR\""
else # if Mac, use fswatch
    INW="fswatch";
    # default events specified via a mask, see
    # https://emcrisostomo.github.io/fswatch/doc/1.14.0/fswatch.html/Invoking-fswatch.html#Numeric-Event-Flags
    # default of 414 = MovedTo + MovedFrom + Renamed + Removed + Updated + Created
    #                = 256 + 128+ 16 + 8 + 4 + 2
    EVENTS="--event=414"
    INCOMMAND="\"$INW\" --recursive \"$EVENTS\" --exclude \"\.git\" --one-event \"$TARGETDIR\""
fi

for cmd in "git" "$INW" "timeout"; do
    # in OSX: `timeout` => brew install coreutils
    # in OSX: `fswatch` => brew install fswatch
    is_command "$cmd" || { stderr "Error: Required command '$cmd' not found"; exit 1; }
done

cd "$TARGETDIR"
echo "$INCOMMAND"

while true; do
    eval "timeout 600 $INCOMMAND" || true
    git pull
    sleep 5
    STATUS=$(git status -s)
    if [ -n "$STATUS" ]; then
        echo "$STATUS"
        echo "commit!"
        git add .
        git commit -m "autocommit"
        git push origin
    fi
done

Sau khi đã có con script ở trên xong rồi việc còn lại là chúng ta cho con script chạy như là 1 services ngầm của máy nhé, ở đây mình sẻ sử dụng pm2 để quản lý services script cho Ubuntu, các bạn cũng nên nhớ là phải chỉnh sửa thư mục Backup cho phù hợp với nơi các bạn Clone Git về trong code

thực hiện gõ lệnh sau để cài đặt một số gói cần thiết cho việc thực thi script, đầu tiên mình sẻ cài đặt nodejs và pm2 cho ubuntu của mình, chú ý pm2 là một module của nodejs vì vậy chúng ta phải cài đặt được nodejs trước đã nhé
apt-get install nodejs
npm i pm2 -g
Sau khi các bạn đã cài đặt nodejs và pm2 xong rồi tiếp đến chung ta cần phải cài inotify-tools để check khi có giá trị bị chỉnh sửa hoặc delete v.v trong folder nó sẻ thực thi các vấn đề của con script đây cũng là một lib trong con script của chúng ta
apt install inotify-tools
Khi đã cài đặt inotify-tools xong rồi bây giờ chúng ta cần phải setting quyền thực thi cho con script và start nó lên bằng pm2
chmod +x sync-backup-gitlab.sh
pm2 start sync-backup-gitlab.sh

Ok sau khi đã start con script lên rồi nó đã thực hiện chạy ngầm dưới hệ thống rồi tiếp đến ta cần thực hiện lệnh để khi chúng ta tắt máy đi nữa pm2 vẫn tự động hoạt động và không tắt rồi còn phải save config lại nữa với những câu lệnh sau nhé

pm2 startup
pm2 save

Vậy là giờ khi bạn có reboot máy đi nữa config vẫn không bị mất và pm2 cũng sẻ tự động khởi chạy, kiểm tra danh sách service script do pm2 quản lý thì các bạn chỉ việc gõ lệnh sau

pm2 list

Bây giờ chúng ta thực hiện check nhé, mình sẻ tạo 1 file cơ bản trong folder repo git đó và check xem nó có tự động push lên git không nhé

Như vậy mình đã hướng dẫn xong cho các bạn cách thực hiện tạo script sync với git repo rồi đấy, chúc các bạn thành công nhé 

Nguồn: itblognote.com


Post a Comment

0 Comments