서버간의 실시간 동기화를 해야 하는데....
무작정 cron으로 rsync를 하기 보다는 inotify를 사용하여 동기화를 시도해보았다.
물론 이건 엄청난 단점을 가지고 있다.. ㅡㅡ;;
그건 알아서들 분산하거나 보완하기 바란다.
간단한 예제를 만들어 보았다.
소스는 간단하니... 뭐.. 설명할 게 없다.
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/inotify.h>
#define EVENT_SIZE ( sizeof (struct inotify_event) )
#define BUF_LEN ( 1024 * ( EVENT_SIZE + 16 ) )
int main( int argc, char **argv ) {
char target[20]; /* monitoring directory name */
int fd;
int wd; /* watch desc */
char buffer[BUF_LEN];
fd = inotify_init();
if (fd < 0) {
perror("inotify_init");
}
if (argc < 2) {
fprintf (stderr, "Watching\n");
strcpy (target, ".");
} else {
fprintf (stderr, "Watching '%s' directory\n", argv[1]);
strcpy (target, argv[1]);
}
wd = inotify_add_watch(fd, "/root/inotify", IN_MODIFY | IN_CREATE | IN_DELETE | IN_MOVED_FROM | IN_MOVED_TO | IN_MOVE_SELF | IN_CLOSE_WRITE);
while(1) {
int length, i = 0;
length = read(fd, buffer, BUF_LEN);
if (length < 0) {
perror("read");
}
while (i < length) {
struct inotify_event *event = (struct inotify_event *) &buffer[i];
printf ("[debug] wd=%d mask=%d cookie=%d len=%d dir=%s\n", event->wd, event->mask, event->cookie, event->len, (event->mask & IN_ISDIR)?"yes":"no");
if (event->len) {
switch (event->mask) {
case IN_CLOSE_WRITE:
if (event->mask & IN_ISDIR) {
printf("The directory %s was created[IN_CLOSE_WRITE].\n", event->name);
} else {
printf("The file %s was created[IN_CLOSE_WRITE].\n", event->name);
}
break;
case IN_CREATE:
if (event->mask & IN_ISDIR) {
printf("The directory %s was created[IN_ISDIR]\n", event->name);
} else {
printf("The file %s was created[IN_ISDIR].\n", event->name);
}
break;
case IN_DELETE:
if (event->mask & IN_ISDIR) {
printf("The directory %s was deleted[IN_DELETE].\n", event->name);
} else {
printf("The file %s was deleted[IN_DELETE].\n", event->name);
}
break;
case IN_MODIFY:
if (event->mask & IN_ISDIR) {
printf("The directory %s was modify[IN_MODIFY].\n", event->name);
} else {
printf("The file %s was modify[IN_MODIFY].\n", event->name);
}
break;
case IN_MOVED_FROM || IN_MOVED_TO || IN_MOVE_SELF:
if (event->mask & IN_ISDIR) {
printf("The directory %s was moved[MOVE].\n", event->name);
} else {
printf("The file %s was moved[MOVE].\n", event->name);
}
break;
}
}
i += EVENT_SIZE + event->len;
}
}
/*
inotify_rm_watch(fd, wd);
close(fd);
*/
return 0;
}
20130613
피드 구독하기:
글 (Atom)
Articles
-
요즘 회사 내부에서 쇼핑 관련 추천이나 여러가지 고민을 해보던중에... 발견한 내용...ㅋㅋㅋ 울 회사는 외부 연구기관에다가 의뢰하여 개별 시나리오를 작성하여 상품 수명 등 여러가지를 해봤는데... 이미 이런 추천 내용이 있어... 다시 고민...
-
Load Balance Mysql Slaves Using MySQLProxy I am sure you all have read about MySQL replication, like Master-Master, Single Master - ...
-
아래 기술한 5가지는 해 놓으시면 좋습니다. 차후에 관련해서 큰 고민을 덜어놓을수 있으니까요. 1. 과학기술인공제회 가입 2. 한이음 멘토 신청 3. 산업통상자원부 전문가 풀 등록 4. 감리원 교육 신청 5. Skill up of an E...
-
百度搜索网站登录口:http://www.baidu.com/search/url_submit.html Google网站登录口:http://www.google.com/intl/zh-CN/add_url.html 孙悟空网站登录口:http://www.sunwuk...
-
webman21님의 블로그 | webman21 http://blog.naver.com/webman21/17890936 인덱스를 선택하는 것은 많은 SQL Server DBA와 개발자에게 신비로운 대상이다. 물론 우리는 인...
-
1. Virtual Columns MariaDB 5.2부터 지원되는 Virtual Columns은 가상의 칼럼을 둬서 수식과 조건문을 사용해 데이터의 가공 결과를 저장하는 것을 말한다. 사용 시 PERSISTENT(stored)와 VIRTUAL...
-
Overview “ 트위터의 새로운 분산 관리 라이브러리 Gizzard를 소개합니다. “를 알아보던 당시 부사수 “임창선”님과 진행했던 또 다른 해외 사례 “Tumblr”를 정리해보았습니다. Tumblr 는 국내에서는 사용자가 많지는 않지만,...
-
I’m happy to post today there is now support for a generic push notifications plugin for PhoneGap Build . The new plugin is called PushP...
-
눈도 고치고, 코도 고치고, 입도 고치고, 여기 저기 성형 수술한 사람을 얼마전 TV에서 보았다. 다들 놀랐다. 그렇게 많은 돈을 들여서 수술했음에도 우리가 생각했던 그런 미인은 아니였다. 이상하게 보이기까지 했다. 눈도 크고, 코도 오똑하고, 입...
-
나는 Python이 좋다. 하지만 Python은 느리다 뭐가 느리냐 하면 지명적인 것이지만 사칙연산이 느리다. 하지만 동적으로 형이 정의되는 다른 스크립트 언어(Perl, Ruby, Javascript)도 C, Java처럼 컴파일을 하는 정적형...