본문 바로가기

리눅스

우분투에서 lsyncd를 사용하여 디렉토리 간에 변경 사항을 실시간으로 동기화하는 방법

728x90

우분투에서 lsyncd를 사용하여 디렉토리 간에 변경 사항을 실시간으로 동기화하는 방법

테스트 환경

  • 운영체제 정보 확인
$ lsb_release -d
Description:    Ubuntu 22.04.2 LTS

1. lsyncd 설치

lsyncd를 설치합니다.

sudo apt-get update
sudo apt-get install lsyncd

2. lsyncd 설정 파일 작성

  • /etc/lsyncd 디렉토리 생성
mkdir /etc/lsyncd
  • /etc/lsyncd/lsyncd.conf.lua 파일을 작성하거나 편집하여 동기화할 디렉토리 및 옵션을 설정합니다.
vim /etc/lsyncd/lsyncd.conf.lua
settings {
  logfile    = "/var/log/lsyncd/lsyncd.log",
  statusFile = "/var/log/lsyncd/lsyncd.status",
  inotifyMode = "CloseWrite",
}

sync {
  default.rsync,
  source      = "/tmp/lsyncd/source",
  target      = "/tmp/lsyncd/destination",
  rsync       = {
    binary   = "/usr/bin/rsync",
    archive  = true,
    verbose  = true,
  },
}
  • source: 동기화할 원본 디렉토리 경로
  • target: 동기화될 대상 디렉토리 경로
  • rsync: Rsync 관련 옵션
  • 테스트를 위한 source 디렉토리 생성
mkdir -p /tmp/lsyncd/source
  • 로그 및 상태 파일 디렉토리 생성
    • lsyncd는 로그 파일과 상태 파일을 저장할 디렉토리를 필요로 합니다.
    • 디렉토리를 생성합니다.
mkdir -p /var/log/lsyncd
  • lsyncd 실행
    • 설정 파일을 작성한 후에는 lsyncd를 실행합니다.
systemctl --now enable lsyncd

위 명령은 지정된 설정 파일을 사용하여 lsyncd를 시작합니다.

728x90

3. logrotate lsyncd 설정 파일 작성

  • lsyncd 파일을 작성하거나 편집합니다.
vim /etc/logrotate.d/lsyncd
/var/log/lsyncd/*.log {
    daily
    dateext
    rotate 7
    missingok
    notifempty
    compress
    delaycompress
    sharedscripts
    postrotate
        if [ -f /var/lock/lsyncd ]; then
            /etc/init.d/lsyncd restart > /dev/null 2>/dev/null || true
        fi
    endscript
}
  • 로그로테이션 테스트
    • logrotate 설정이 올바른지 확인하려면 다음 명령어로 로그로테이션을 직접 실행해 볼 수 있습니다.
logrotate -vf /etc/logrotate.d/lsyncd
$ logrotate -vf /etc/logrotate.d/lsyncd  
reading config file /etc/logrotate.d/lsyncd
Reading state from file: /var/lib/logrotate/status
Allocating hash table for state file, size 64 entries
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state
Creating new state

Handling 1 logs

rotating pattern: /var/log/lsyncd/*.log  forced from command line (7 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/lsyncd/lsyncd.log
  Now: 2023-12-01 11:20
  Last rotated at 2023-12-01 11:15
  log does not need rotating (log is empty)
not running postrotate script, since no logs were rotated

 

이제 /tmp/lsyncd/source 디렉토리의 변경 사항이 /tmp/lsyncd/destination으로 실시간으로 동기화됩니다.

필요에 따라 설정 파일을 조정하여 더 많은 옵션을 사용하고 특정 요구 사항을 충족시킬 수 있습니다.

 

참고URL

- ubuntu manuals : lsyncd

- github : Lsyncd - Live Syncing (Mirror) Daemon

 

728x90