1. samba 개요
samba는 윈도우와 리눅스간에 파일을 공유 할 수 있는 방법을 제공해 주는 프로그램이다.


2. samba 설치

 $ sudo apt-get install samba


3. samba 설정
우분투 samba 의 기본설정은 리눅스의 계정id와는 별도로 설정된다. 따라서 samba의 사용자를 다시 설정해 줘야 한다. samba id를 만들때는 사용계정의 id와 같게 만들어 주는게 좋다. 이것은 접속시에 해당 리눅스 계정과 매치되기 때문이다. 즉 자신이 aaa라는 id를 사용하고 있다고 하면 samba id도 aaa로 만들어 주는게 좋다는 것이다. 다음과 같이 id를 만든다.

 $ sudo smbpasswd -a 계정ID

이를 실행하면 passwd를 물어 본다. 
윈도우에서 접근시에는 계정패스워드(리눅스 로그인시 패스워드)가 아니라 여기서 입력한 passwd를 사용한다.


4. smb.conf 수정
/etc/samba/smb.conf 파일을 수정한다.
파일의 끝부분에 Share Definitions의 [homes]의 주석을 푼다.

[homes]
comment = Home Directories
browsable = no

read only = no


5. samba 재시작

 $ sudo /etc/init.d/samba restart


6. 윈도우에서 samba 디렉토리 사용하기



폴더에 samba 서버 IP주소와 서비스 디렉토리를 입력한다. 마침을 클릭하면 ID와 PASSWD를 묻는데 위에서 추가한 samba 계정의 정보를 입력한다.


인증이 이루어지면 네트워크 드라이브가 추가된것을 볼수 있다.

'프로그래밍 > 리눅스' 카테고리의 다른 글

ubuntu에 tomcat5.5 설치하기  (0) 2009.09.10
samba 설치하기  (1) 2009.07.08
NFS 설치 및 설정  (0) 2009.07.06
java.net.SocketException: Too many open files 대처법  (0) 2009.06.25
top 명령어 정리  (0) 2009.06.24
특정 디렉토리의 파일 갯수 확인하기  (0) 2009.06.24
Posted by devop

댓글을 달아 주세요

  1. 저기요...

    Read only를 no 로 어떻게 바꾸나요...?

    2011.05.13 21:55 [ ADDR : EDIT/ DEL : REPLY ]

프로그래밍/JAVA2009.07.08 10:42
1. 데몬(daemon) 이란?
주기적인 서비스 요청을 처리하기 위해서 커널상에 백그라운드 모드로 실행되는 프로세스로, 메모리 관리 방법에 따라 단독 데몬과 xinetd로 분리된다.

  • 단독데몬
    항상 백그라운드 모드로 실행되고 메모리를 상대적으로 많이 소비한다. 그러나 서비스(응답속도)가 빠르다. httpd와 같은 웹서비스 데몬이 대표적.
  • xinetd(슈퍼데몬)
    요청이 있을때마다 xinetd가 서비스를 싱행시켜주므로 메모리 소비가 적다. 그러나 단독데몬에 비해 상대적으로 서비스 속도가 느리다.


2. 간단한 자바 데몬 만들기
nohup을 이용해서 java를 실행시킨다.

터미널이 종료될 때(쉘이 종료될 때) 프로세스가 죽는 이유는 해당 프로세스가 쉘의 자식 프로세스 이기 때문이다. 따라서, 부모 프로세스가 죽을대 던지는 SIGHUP을 자식 프로세스가 받게 된다.

nohup은 부모 프로세스가 죽을때 자식 프로세스에게 SIGHUP을 던지지 않는 프로세스를 말한다.

$ nohup java 클래스명 & 
 
사용하기 편한 장점은 있으나, 문제는 중지를 시킬수 없다. 즉, 해당 프로세스 ID를 찾아내 kill하는 수 밖에 없다. 물론 파일 체크 기법, 소켓을 이용한 제어 방법등을 사용할 수 있지만 스스로 구현해야 하는 번거로움이 있다.


3. apache commons daemon 이용하기
Java는 UNIX의 시그널 처리를 할수 없기때문에, 중지 신호(TERM signal)를 처리하기 위해서는 따로 구현을 해야한다. 이런 번거로움을 해결하기 위해 자카르타의 하위 프로젝트중의 commons daemon을 이용한다. commons daemon은 중지 신호를 받으면 미리 지정된 메소드를 실행한다.


UNIX용 Jsvc와 윈도우용 Procrun 있다.
여기서는 Jsvc를 이용해보도록 하겠다.


commons daemon을 다운로드해 압축을 해제하면 위 그림과 같다.
commons-daemon.jar 파일은 Java프로젝트 lib폴더에 복사해둔다.


bin폴더의 압축파일을 해제하면 jsvc-src라는 폴더가 나온다.
폴더의 내용은 위와 같다.
commons daemon을 사용하기 위해서는 바로 여기서 jsvc를 빌드해줘야 한다.
빌드환경은 다음과 같다.(리눅스에서 빌드해야한다.)

  • GNU AutoConf(at least 2.53)
  • ANSI-C compliant compiler(GCC is good)
  • GNU Make
  • A Java Platform 2 compliant SDK

여기서부터는 ubuntu 8.10 환경에서 진행하도록 한다.

먼저 JDK가 설치되어 있지 않다면 JDK를 설치한다.

 $ sudo apt-get install sun-java6-jdk

JDK가 설치되는 경로는 /usr/lib/jvm/java-6-sun 이다.

gcc 및 make 가 설치되있지 않다면 아래 명령를 이용해 한방에 설치한다.

 $ sudo apt-get install build-essential

AutoConf가 설치되있지 않다면 AutoConf를 설치한다.

 $ sudo apt-get install autoconf

Jsvc를 빌드하는 방법은 다음과 같다.

  • support/buildconf.sh
  • ./configure --with-java=/usr/lib/jvm/java-6-sun
  • make


빌드가 성공적으로 이루어졌다면 위 그림과 같이 jsvc가 만들어진것을 확인할 수 있다. 이후 이 파일을 가지고 Java 데몬을 실행한다.

Java 데몬을 만들려면 org.apache.commons.daemon.Daemon 인터페이스의 init, start, stop, destory 메소드를 구현해야 한다.

샘플 코드는 아래와 같다.
import org.apache.commons.daemon.Daemon;
import org.apache.commons.daemon.DaemonContext;

public class DaemonTest implements Daemon {

	Thread t = null;
	
	@Override
	public void init(DaemonContext arg0) throws Exception {
		System.err.println("daemonTest init");
		t = new DaemonThread();
	}

	@Override
	public void start() throws Exception {
		System.err.println("daemonTest start");
		t.start();
	}

	@Override
	public void stop() throws Exception {
		System.err.println("daemonTest stop");
		t.interrupt();
	}
	
	@Override
	public void destroy() {
		System.err.println("daemonTest destroy");
	}
}
public class DaemonThread extends Thread {

	@Override
	public void run() {
		while( Thread.interrupted() ) {
			System.err.println("run");
			try {
				Thread.sleep(5000);
			} catch (InterruptedException e) {
				Thread.currentThread().interrupt();
				return;
			}
		}
	}	
}
init에서 초기화, start에서 처리할 작업을 별도의 쓰레드로 생성해서 실행한다. start 메소드 호출후 반드시 return 되어야 데몬이 시그널 처리를 제대로 할 수 있다.
stop, destroy 는 중지 신호가 오면 차례되로 호출된다.

이제 실행/중지 스크립트를 작성한다.
Jsvc를 싱행하는데 필요한것은 실행하는 계정(user), JAVA_HOME(-home), 프로세스ID 파일(-pidfile), 출력지정(-outfile, -errfile), 클래스파일(-cp) 등이 있다.
#!/bin/sh
JAVA_HOME=/usr/lib/jvm/java-6-sun
DAEMON_HOME=/home/lyb1495/commons-daemon-1.0.1/bin/jsvc-src
DAEMON_USER=lyb1495
DAEMONTEST_HOME=/home/lyb1495/workspace/Daemon
PID_FILE=$DAEMONTEST_HOME/daemon_test.pid

CLASSPATH=\
$DAEMONTEST_HOME/bin:\
$DAEMONTEST_HOME/lib/commons-daemon.jar

case "$1" in

	start)
    #
    # Start Daemon
    #
    $DAEMON_HOME/jsvc \
    -user $DAEMON_USER \
    -home $JAVA_HOME \
    -wait 10 \
    -pidfile $PID_FILE \
-errfile '&1' \
    -cp $CLASSPATH \
    DaemonTest
    #
    # To get a verbose JVM
    #-verbose \
    # To get a debug of jsvc.
    #-debug \
    exit $?
    ;;

  stop)
    #
    # Stop PostMan
    #
    $DAEMON_HOME/jsvc \
    -stop \
    -pidfile $PID_FILE \
    DaemonTest
    exit $?
    ;;
#
  *)
    echo "Usage DaemonTest.sh start/stop"
    exit 1;;
esac
이제 Java 데몬을 실행하기 위한 모든 준비를 마쳤다.


위에서 작성한 스크립트 파일을 이용해 Java 데몬을 실핸한다.
정상적으로 데몬이 시작된다면 PID_FILE에 지정한 파일이 생성된것을 확인할 수 있다.


데몬을 중지하려면 start 대신 stop을 입력으로 스크립트를 실행하면 된다.

'프로그래밍 > JAVA' 카테고리의 다른 글

Java 쓰레드  (0) 2009.12.04
스트러츠 properties 한글 편집  (0) 2009.12.03
Java XML Parser JDOM  (2) 2009.09.03
JRE Detection  (0) 2009.08.11
자바 웹 스타트(Java Web Start)  (0) 2009.08.07
JFreeChart with SWT  (0) 2009.07.14
자바 데몬(daemon) 만들기  (2) 2009.07.08
LRU 캐쉬 엔진의 구현  (0) 2009.06.26
JAVA Memory Leak  (2) 2009.06.25
Out Of Memory Error(OOME)에 대하여  (0) 2009.06.25
JAVA Heap 메모리 모델  (2) 2009.06.24
Posted by devop

댓글을 달아 주세요

  1. 아 방금전까지 모하다가
    java -jar abc.jar &

    아 이거하면 끝 하고서 순간 좋아했는데, 생각해보니까 데몬을 만들어야된다는걸 깨닫고 좌절하다가 정말 좋은글 감사합니다.(일단 두서가 없지만)

    2012.04.05 01:00 [ ADDR : EDIT/ DEL : REPLY ]
    • 작성된지 꽤 오래된 글인데, 도움이 되었다니 저도 기쁘네요 ㅎㅎ

      2012.04.07 00:33 신고 [ ADDR : EDIT/ DEL ]

1. 설치

  • NFS 서버
    sudo apt-get install nfs-kernel-server
  • NFS 클라이언트
    sudo apt-get install nfs-common

2. 설정
/etc/exports 파일이 있다.
이 파일에 마운트할 디렉토리와 접속할수 있는 클라이언트 IP, 옵션등을 입력한다.

/data 192.168.0.1(rw, sync)
/data 192.168.0.2(ro, async)

/home/pub (ro, insecure, root_squash)


위의 예를 보자.

첫번째는 /data 디렉토리를 IP가 192.168.0.1인 호스트에게 read/write 권한으로 서비스를 제공하겠다는 뜻이다.
두번재는 /data 디렉토리를 IP가 192.168.0.2인 호스트에게 read only권한으로 서비스를 제공하겠다는 뜻이다.
세번째는 익명의 공개 서비스

root_squash는 클라이언트의 root를 서버에서의 nobody로 매칭시킨다는 뜻이다.

** IP는 특정 IP와 서브넷마스크를 이용해 IP블록을 지정할 수 있다.(192.168.0.0/255.255.255.0 처럼)

sync 옵션

  • Program attempts write to NFS mount.
  • NFS client passes request to NFS server.
  • NFS server passes write to local filesystem.
  • Local filesystem attempts write.
  • Local filesystem tells NFS server if write succeeded or not.
  • NFS server tells NFS client if write succeeded or not.
  • NFS client tells program if write succeeded or not.

That is safe, but obviously there is some latency involved.

async 옵션

  • Program attempts write to NFS mount.
  • NFS client passes request to NFS server.
  • NFS server tells NFS client write succeeded.
  • NFS client tells program write succeeded.
  • NFS server passes write to local filesystem.
  • Local filesystem attempts write.

See the problem?  What happens if, in step 6, the write fails?
Maybe the filesystem is full, maybe the disk is bad, maybe permissions
have changed, etc.  But everything has already been told it worked.
If it's just, say, an append to a log file or mail spool, not too bad,
maybe.  But what if it's a lock file being created?  What if it's a
database transaction commit?  Serious bad news.  It gets worse if the
client caches the failed write and continues using the bad data.


3. NFS 시작
sudo /etc/init.d/nfs-kernel-server restart


4. 클라이언트에서 NFS 마운트
sudo mount -t nfs 192.168.0.1:/data /home/nfs/data


5. 클라이언트에서 NFS 마운트 해제
sudo umout /home/nfs/data

'프로그래밍 > 리눅스' 카테고리의 다른 글

ubuntu에 tomcat5.5 설치하기  (0) 2009.09.10
samba 설치하기  (1) 2009.07.08
NFS 설치 및 설정  (0) 2009.07.06
java.net.SocketException: Too many open files 대처법  (0) 2009.06.25
top 명령어 정리  (0) 2009.06.24
특정 디렉토리의 파일 갯수 확인하기  (0) 2009.06.24
Posted by devop
TAG nfs, 리눅스

댓글을 달아 주세요

FD(File Descriptor)를 늘려줘야 한다.

1. ulimit -a 명령으로 open files 갯수를 확인.


open files의 갯수가 1024개임을 확인할 수 있다.

2. 프로세스별로 오픈된 파일 갯수 확인

 lsof -p 프로세스ID | wc -l

3. 파일갯수 늘려주기

root 사용자의 open files 갯수를 4096(soft), 4096(hard)로 제한하기 위해 /etc/secyrity/limits.conf에 다음을 추가한다.

root soft nofile 4096
root hard nofile 4096

새로 세션을 열어 ulimit -a 로 정상적으로 적용되었는지 확인하면 된다.

'프로그래밍 > 리눅스' 카테고리의 다른 글

ubuntu에 tomcat5.5 설치하기  (0) 2009.09.10
samba 설치하기  (1) 2009.07.08
NFS 설치 및 설정  (0) 2009.07.06
java.net.SocketException: Too many open files 대처법  (0) 2009.06.25
top 명령어 정리  (0) 2009.06.24
특정 디렉토리의 파일 갯수 확인하기  (0) 2009.06.24
Posted by devop

댓글을 달아 주세요


1행 시스템의 가동 시간과 평균 부하
현재시간 11:59:53 , uptime 67day , 현재 로그인된 사용자 수(2 users)
시스템의 최근 1분 5분 15분에 대한 각각의 평균 부하율(load average: 0.64, 0.56, 0.45)

** load average는 작업의 대기시간을 말한다. 값이 1이 나왔다면 1분 동안 평균 1개 정도의 프로세서가 대기상태에 있다는 것이다. 서버마다 차이가 있긴 하지만 5정도면 서버가 부하를 받는 다고 생각한다. 10 ~ 15이상이면 과부하상태라고 본다.

2행 현재 실행중인 프로세스들의 상황
전체 실행된 프로세스의 수는 81개 ,  실행중인 프로세스 1개 , 유휴상태 80개 , 정지된 프로세스 0 개 , 좀비프로스세 0 개

3행 CPU의 사용에 대한 상황
사용자가 사용중인 CPU 19.3% , 시스템이 사용하는 CPU 1.7% , NICE 정책에 의해 사용되는 CPU 0.0% , idle 78.9% , 입출력 대기 0.0% 등

4행 메모리 사용에 대한 상황
전체 물리메모리 4053980k , 사용중인 메모리 3855432k , 여유메모리 19848k 버퍼된 메모리 111460k

5행 스왑 메모리의 사용에 대한 상황
전체 스왑메모리  6385796k , 사용중인 스왑 메모리 2708 , 여유스왑메모리 6383088k , 캐싱메모리 3312132k

테이블 필드
PID : 프로세스 ID
USER : 프로세스를 실행시킨 사용자 ID
PR : 프로세스 우선순위
NI : NICE 값. 마이너스 값이 우선순위가 높다.
VIRT : 프로세스가 사용중인 가상 메모리의 크기(SWAP+RES)
RES : 상주 크기(Resident Size). 프로세스가 소비하는 실제 물리 메모리의 양(%MEM과 일치)
SHR : 프로세스가 사용중인 공유 메모리의 크기. VIRT중 공유가능한 메모리의 양
S : 프로세스 상태(D=uninterruptible sleep, R=running, S=sleeping, T=traced or stopped, Z=zombie)
%CPU : 프로세스가 사용하는 CPU 사용률
%MEM : 프로세스가 사용하는 메모리의 사용률
TIME+ : 프로세스가 시작하며 현재까지 사용한 CPU time
COMMAND : 실행된 명령어

'프로그래밍 > 리눅스' 카테고리의 다른 글

ubuntu에 tomcat5.5 설치하기  (0) 2009.09.10
samba 설치하기  (1) 2009.07.08
NFS 설치 및 설정  (0) 2009.07.06
java.net.SocketException: Too many open files 대처법  (0) 2009.06.25
top 명령어 정리  (0) 2009.06.24
특정 디렉토리의 파일 갯수 확인하기  (0) 2009.06.24
Posted by devop

댓글을 달아 주세요


find 디렉토리경로 -type f | wc -l

find 명령으로 디렉토리경로에서 파일만 검색한다. 그 검색결과를 파이프로 넘겨서 wc 명령의 -l 옵션으로 출력 라인수를 계산하는 방식이다.

find -type f 명령의 출력되는 라인수가 파일의 갯수와 동일하기 때문에 위와 같은 명령으로 파일 갯수를 알아 낼 수 있다.

'프로그래밍 > 리눅스' 카테고리의 다른 글

ubuntu에 tomcat5.5 설치하기  (0) 2009.09.10
samba 설치하기  (1) 2009.07.08
NFS 설치 및 설정  (0) 2009.07.06
java.net.SocketException: Too many open files 대처법  (0) 2009.06.25
top 명령어 정리  (0) 2009.06.24
특정 디렉토리의 파일 갯수 확인하기  (0) 2009.06.24
Posted by devop

댓글을 달아 주세요