Nếu bạn muốn đi khó, bạn có thể sử dụng lệnh rsync tự nhiên trong OsX , như * nix staff.
Trước mọi thứ, bạn phải có quyền truy cập vào máy chủ từ xa bằng ssh. Máy chủ OpenSSH được cài đặt sẵn trên Mac OsX và bạn không cần phải cài đặt bất kỳ gói bổ sung nào. Chỉ cần làm một số cài đặt hệ thống. Để bật máy chủ OpenSSH trên Mac OS X, hãy mở Tùy chọn hệ thống và nhấp để Chia sẻ. Và hơn thế nữa, hãy chọn hộp Đăng nhập từ xa để bật SSH, sau đó chọn nút radio có nhãn Tất cả người dùng từ phần Cho phép truy cập .
Bây giờ bạn có thể truy cập vào máy chủ từ xa bằng ssh.
Bây giờ, bạn phải tạo khóa truy cập công cộng để truy cập không cần mật khẩu từ máy khách cục bộ đến máy chủ từ xa qua ssh. Cho rằng bạn phải có được bàn tay của bạn một chút bẩn. :)
Đầu tiên, xác định xem bạn đã có khóa xác thực chưa. Trong Terminal , chạy:
sudo ls -la /var/root/.ssh
Nếu bạn thấy "id_dsa" và id_dsa.pub , thì bạn có thể bỏ qua phần còn lại của phần này.
Trên máy khách, hãy chạy như sau trong Terminal:
sudo ssh-keygen -t dsa -f /private/var/root/.ssh/id_dsa -C "comment about this key"
Sau khi tạo khóa truy cập được tạo trong máy khách cục bộ, bạn cần sao chép khóa chung của khách vào tệp ủy quyền của máy chủ. Bạn có thể thực hiện việc này bằng lệnh Terminal đơn giản gắn thêm khóa chung vào danh sách các khóa được ủy quyền:
sudo cat /private/var/root/.ssh/id_dsa.pub | ssh root@remote_host_address 'cat - >> ~/.ssh/authorized_keys'
Lệnh bên dưới sẽ thực hiện sao lưu gia tăng hệ thống tập tin gốc của bạn trong máy khách cục bộ trên máy chủ từ xa của bạn:
/usr/local/bin/rsync -aNHAXx --protect-args --fileflags --force-change --rsync-path="/usr/local/bin/rsync" / root@remote_host_address:/Volumes/Backup/GuestMachine
Bạn có thể thay đổi các tham số của rsync để thay đổi hành vi đồng bộ hóa. Nếu bạn thêm lệnh này vào crontab , đồng bộ hóa có thể được chạy trong bất kỳ chu kỳ thời gian nào. Ví dụ:
sudo crontab -e
nối dòng dưới đây vào crontab:
*/30 * * * * /usr/local/bin/rsync -aNHAXx --protect-args --fileflags --force-change --rsync-path="/usr/local/bin/rsync" / root@remote_host_address:/Volumes/Backup/GuestMachine
Điều này sẽ được chạy đồng bộ hóa sau mỗi nửa giờ.
Đây là kịch bản Python mẫu:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Cron automated synchronization script.
Desc: Synchronize remote folder into local machine. Duplicate processes
are disallowed until running process finished.
Usage:
:: Change required variables as _user, _password, _domain etc.
:: Edit crontab
# crontab -e
:: Append line below.
*/30 * * * * python synchronizator.py 2>&1 &
Author: Sencer HAMARAT (RecNes)
E-Mail: sencerhamarat@gmail.com
"""
import shlex
from subprocess import Popen, PIPE
import logging as log
import sys
__author__ = "Sencer HAMARAT"
_user = 'username'
_password = 'password'
_domain = 'example.com'
_expectation = "Enter passphrase for key \'/home/%s/.ssh/id_rsa\':" % _user
_rsync = '/usr/bin/rsync --partial --progress -avvz -e'
_pub_key = '/home/%s/.ssh/id_rsa.pub' % _user
_ssh = '/usr/bin/ssh -i %s' % _pub_key
_remoteDir = '/home/%s/backup/' % _user
_localDir = '/home/%s/backup/' % _user
_command = '%s %s %s@%s:%s %s' % (_rsync, _ssh, _user, _domain, _remoteDir, _localDir)
run_command = shlex.split(_command)
_logFile = "logfile.log"
_logFormat = "%(asctime)s %(levelname)s %(name)s %(process)d %(threadName)s %(module)s:%(lineno)d %(funcName)s() " \
"%(message)s\n"
log.basicConfig(filename=_logFile, level=log.DEBUG, format=_logFormat)
log.debug(u'Command will run: %s' % _command)
try:
running_command = Popen(run_command, stdin=PIPE, stdout=PIPE, stderr=PIPE)
if running_command.poll():
log.debug(repr(running_command.poll()))
sys.exit()
if _expectation in running_command.communicate():
running_command.communicate(_password)
print running_command.communicate()
except Exception as e:
log.debug(repr(e))
finally:
sys.exit()