2017. 5. 15. 23:14


오렌지 파이에 openvpn 2.3.10 버젼 설치를 했더니 pam.so 어쩌고 오류가 난다.


좀 검색해 봤더니 이번 버젼의 패지에 포함된 so 파일에 문제가 있는 듯 하다.


그래서...


이전에 설치해둔 2.2.1 버전 설치하면서 들어온 모듈로 갈아치워서 동작 시켰다 -_-;;



openvpn-auth-pam.so


(arm 아키텍처 버전 입니다)



파일의 위치는 아래와 같다 (... 아마도)

/usr/lib/openvpn/openvpn-auth-pam.so


저기가 아닌경우는 root 계정으로 / 부터 뒤져보자~

find / -name (파일명)


하드디스크라면 버러러러러럭~~~~ 좀 걸리겠지만...


쓷 유저라면 수 초내에 바로 표시 될 것이다


Posted by 해비
2017. 4. 19. 07:56

[Java] XStream을 사용한 XML 파싱




XStream 라이브러리를 사용하여 XML 파싱하는 예제소스 입니다.



build.gradle 에 라이브러리 추가 (Gradle 사용 시)

// https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream

compile group: 'com.thoughtworks.xstream', name: 'xstream', version: '1.4.9' 


Gradle 사용하지 않고 진행 시 라이브러리는 직접 다운받아서 추가해 줍니다.



main 소스

package xmlparse;


import java.net.URL;

import java.net.URLConnection;


import com.thoughtworks.xstream.XStream;

import com.thoughtworks.xstream.io.xml.DomDriver;


import xmlparse.vo.Book;

import xmlparse.vo.Catalog;


public class xmlparse {


public static void main(String[] args) throws Exception {


// XStream 인스턴스 생성

        XStream xstream = new XStream(new DomDriver());

        

        // alias 설정 XML tag, 담당할 class 지정

        // 각 클래스는 해당 태그가 가진 항목을 구성하고 있다

        xstream.alias("catalog", Catalog.class);

        xstream.alias("book", Book.class);

        xstream.addImplicitCollection(Catalog.class, "books");

        

        // 태그의 어노테이션 처리 

        // <book id="xxx"> 에서 xxx 를 읽어오기 위해 필요하다

        // [REF] http://stackoverflow.com/questions/18106619/xstreamasattribute-not-adding-as-attribute-xstream

        //xstream.autodetectAnnotations(true);  // auto 속성을 지정하게 되면 모두 처리하는 듯 하다. (귀찮으면 걍 이거 쓰자 ;;)

        xstream.processAnnotations(Book.class); // 각 속성별로 읽어오도록 지정 한다.

        

        // XML 로드

        URL url = new URL("http://haebi.net/book.xml");

        URLConnection conn = url.openConnection();

        

        // 최상위 태그로부터 XML 파싱

        Catalog var = (Catalog)xstream.fromXML(conn.getInputStream());

        

        // 반복문 돌면서 처리한다

        for(int i=0; i<var.books.size(); i++)

        {

        Book book = var.books.get(i);

        System.out.println(book.id);

        System.out.println(book.author);

        }

        

}


book.java

package xmlparse.vo;


import com.thoughtworks.xstream.annotations.XStreamAlias;

import com.thoughtworks.xstream.annotations.XStreamAsAttribute;


@XStreamAlias("book")

public class Book {

@XStreamAsAttribute

    public String id;

public String author;

public String title;

public String genre;

public String price;

public String publish_date;

public String description;

// 갯수가 멀티개인 속성을 가지면...

//@XStreamImplicit(itemFieldName="reply")

//private ArrayList<string> reply

}


catalog.java

package xmlparse.vo;


import java.util.LinkedList;

import java.util.List;


import com.thoughtworks.xstream.annotations.XStreamAlias;

import com.thoughtworks.xstream.annotations.XStreamAsAttribute;


@XStreamAlias("catalog")

public class Catalog {

public List<Book> books = new LinkedList<Book>();

}



Depth 가 낮은 XML 처리에는 유용하겠는데, 깊어지면 답이 없어 보인다. ;;;

10 depth 까지 내려가면 클래스 언제 다 맹글어 -_-;;




Posted by 해비
2017. 4. 18. 01:54

XPath를 활용한 XML 파싱



syntaxhighliter 에서 코드가 뭉개져서 그냥 붙여넣기 했더니 보기가 영 그렇다.


gist 에 올린 소스가 더 이쁘게 보여지므로 참고

[gist 링크] https://gist.github.com/haebi/29070dda0556fc6fba5909b45a067faa



소스코드

package xmlparse2;


import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.xpath.XPath;

import javax.xml.xpath.XPathConstants;

import javax.xml.xpath.XPathFactory;


import org.w3c.dom.Document;

import org.w3c.dom.NodeList;


public class XmlParse2 {


public static void main(String[] args) throws Exception {

// 샘플 XML 파일(books.xml)

// [REF] https://msdn.microsoft.com/ko-kr/library/ms762271(v=vs.85).aspx

Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("http://haebi.net/book.xml");

// XPath 인스턴스 생성

XPath xpath = XPathFactory.newInstance().newXPath();

// 대상 노드 지정

String expression = "/catalog/book";

// 지정 노드로 부터 노드목록 획득

NodeList nl = (NodeList) xpath.evaluate(expression, doc, XPathConstants.NODESET);

// 첫번째 노드의 부모 노드명을 출력

System.out.println(nl.item(0).getParentNode().getNodeName());

System.out.println("sub node start!!");

System.out.println("-----------------------------------------------------");

// 1번째  book 노드의 자식노드 목록을 획득

NodeList cnl = nl.item(0).getChildNodes(); // author, title, genre, price, publish_date, description

System.out.println(cnl.item(0).getParentNode().getNodeName());


// 확보된 노드 목록을 순서대로 출력

for(int i=0; i<cnl.getLength(); i++)

{

// 노드 이름이 #text로 출력되는 문제로 스킵 하도록 설정하였다. 

// xml파일의 들여쓰기로 인한 문제 인듯 하다.

if("#text".equals(cnl.item(i).getNodeName()))

continue;

// 현재 노드 인덱스 번호 출력

System.out.println(i);

// 노드 명 출력

System.out.println("NODE : " + cnl.item(i).getNodeName());

// 노드 값 출력

System.out.println("VALUE : " + cnl.item(i).getTextContent());

}

System.out.println("-----------------------------------------------------");

}

}



출력

Start!!

catalog

sub node start!!

-----------------------------------------------------

book

1

NODE : author

VALUE : Gambardella, Matthew

3

NODE : title

VALUE : XML Developer's Guide

5

NODE : genre

VALUE : Computer

7

NODE : price

VALUE : 44.95

9

NODE : publish_date

VALUE : 2000-10-01

11

NODE : description

VALUE : An in-depth look at creating applications 

      with XML.

----------------------------------------------------- 




Posted by 해비
2017. 1. 20. 17:41


[오류]

fatal: No path specified. See 'man git-pull' for valid url syntax


경로가 맞는에 안되서 알고보니...

윈도우에서 gitBASH 사용중 발생한 문제였다.


앞에 ssh:// 붙이지 말고 경로를 입력한다.

ssh://git@123.123.123.123:project


예)

git remote set-url origin git@123.123.123.123:project


git push --set-upstream origin master



Posted by 해비
2016. 12. 16. 16:44

CentOS 7 에 mysql 설치 하면서 막혔던 부분 위주로 정리 합니다.



패스워드 설정규칙 복잡성 해제

sudo vim /etc/my.cnf

validate-password=off



임시 패스워드 확인

grep 'temporary password' /var/log/mysqld.log



루트 패스워드 설정 및 기타 초기 설정

sudo mysql_secure_installation



방화벽 오픈 및 반영

sudo firewall-cmd --zone=public --add-service=mysql --permanent

sudo firewall-cmd --reload




Posted by 해비
2016. 12. 11. 01:52
인텔 내장그래픽의 하드웨어 가속 설정에 대해 설명합니다.

환경
- 민트 리눅스 64비트 시나몬
- 인텔 i5-5200U 내장그래픽
- VLC 플레이어

vaapi 드라이버 다운로드


deb 파일 받아서 설치하면 끝~!!


vainfo 명령어로 아래와 같이 가속되는 목록을 확인할 수있다.

haebi@haebi-W330AU ~ $ vainfo 

libva info: VA-API version 0.39.0

libva info: va_getDriverName() returns 0

libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so

libva info: Found init function __vaDriverInit_0_39

libva info: va_openDriver() returns 0

vainfo: VA-API version: 0.39 (libva 1.7.0)

vainfo: Driver version: Intel i965 driver for Intel(R) Broadwell - 1.7.1

vainfo: Supported profile and entrypoints

      VAProfileMPEG2Simple            : VAEntrypointVLD

      VAProfileMPEG2Simple            : VAEntrypointEncSlice

      VAProfileMPEG2Main              : VAEntrypointVLD

      VAProfileMPEG2Main              : VAEntrypointEncSlice

      VAProfileH264ConstrainedBaseline: VAEntrypointVLD

      VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice

      VAProfileH264Main               : VAEntrypointVLD

      VAProfileH264Main               : VAEntrypointEncSlice

      VAProfileH264High               : VAEntrypointVLD

      VAProfileH264High               : VAEntrypointEncSlice

      VAProfileH264MultiviewHigh      : VAEntrypointVLD

      VAProfileH264MultiviewHigh      : VAEntrypointEncSlice

      VAProfileH264StereoHigh         : VAEntrypointVLD

      VAProfileH264StereoHigh         : VAEntrypointEncSlice

      VAProfileVC1Simple              : VAEntrypointVLD

      VAProfileVC1Main                : VAEntrypointVLD

      VAProfileVC1Advanced            : VAEntrypointVLD

      VAProfileNone                   : VAEntrypointVideoProc

      VAProfileJPEGBaseline           : VAEntrypointVLD

      VAProfileVP8Version0_3          : VAEntrypointVLD

 


실제로 가속여부를 확인 하겠습니다

VLC 플레이어를 기준으로 설명 합니다.


일단 재생해서 현재 상태를 확인 합시다.

CPU 사용률이 40% 에 육박합니다. (제일위 하늘색 CPU% 부분 참고)



설정(Ctrl + P) 에 들어가서 [입력/코덱] -> [하드웨어 가속디코딩] 을 찾습니다.

기본상태는 [자동] 으로 되어 있습니다.

다른거 건들필요 없습니다.

[하드웨어 가속 디코딩]부분만 [X11 VA-API 비디오 디코더]로 선택해 주세요. 그리고 저장 눌러서 빠져 나옵시다.

우리가 위에서 설치한 것이 vaapi 드라이버 거든요



그리고 다시 재생!! 결과는..??

우오오오!!! - CPU 사용률10% 대로 진입!! (맨 윗부분하늘색 CPU%부분)

동영상 가속에 성공하여 CPU사용률이 뚝! 떨어진 것을 볼 수있습니다.




Posted by 해비
2016. 12. 5. 16:48


Tomcat AccessLog에서 특정 요청을 제외 (AccessLogValve 설정)

[참고] https://tomcat.apache.org/tomcat-7.0-doc/config/valve.html#Access_Log_Valve


0. 전제조건:

- 소스 수정 필요!!


1. conf/server.xml 열어서 아래 내용 추가

         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

               conditionUnless="DoNotLog"

               prefix="localhost_access_log" suffix=".txt"

               pattern="%h %l %u %t &quot;%r&quot; %s %b" /> 


  

2. 로그를 남기기 원하지 않는 요청에 request.setAttribute("DoNotLog", "")를  추가한다.

@RequestMapping(value = "/weblist", method = RequestMethod.GET)

public ModelAndView testPageList(HttpServletRequest request)

{

request.setAttribute("DoNotLog", "");

ModelAndView mav = new ModelAndView();

// Call services

mav.addObject("list", testService.getEmpDetail());

mav.addObject("list2", testService.getEmpDetail());

// ... if you need more

mav.setViewName("testlist");

return mav;

}

 


3. 빌드 및 배포 후 서버 재시작


4. 이제 더 이상 해당 요청에서는 AccessLog 가 기록되지 않는다.




== 간단 요약 ==

1. Server.xml 의 Valve 설정에 conditionUnless 를 추가 및 설정한다.

   (로그 필요없는 조건 = "DoNotLog" 파라메터를 검사 시 null 이 아닌 놈들)


2. 소스에서 AccessLog 에 설정한 파라메터에 "" 을 set 하였으므로,

   이 요청에서 DoNotLog 파라메터는 null 이 아니게 되고, => 기록이 되지 않게 된다.

   ( 기록대상은 request.getAttribute("DoNotLog") = null )




Posted by 해비
2016. 12. 5. 11:41

현재 상태 확인


현재 디스크의 파티션 구조 확인

lsblk 명령어

[haebi@localhost ~]$ lsblk

NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT

sda               8:0    0 232.9G  0 disk 

├─sda1            8:1    0   238M  0 part /boot

└─sda2            8:2    0  78.3G  0 part 

  ├─centos-root 253:0    0  46.6G  0 lvm  /

  ├─centos-swap 253:1    0   3.8G  0 lvm  [SWAP]

  └─centos-home 253:2    0    28G  0 lvm  /home

sr0              11:0    1  1024M  0 rom   



[haebi@localhost ~]$ sudo sfdisk -ls /dev/sda

244198584


Disk /dev/sda: 30401 cylinders, 255 heads, 63 sectors/track

Units: cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0


   Device Boot Start     End   #cyls    #blocks   Id  System

/dev/sda1   *      0+     30-     31-    243712   83  Linux

/dev/sda2         30+  10256-  10226-  82137088   8e  Linux LVM

/dev/sda3          0       -       0          0    0  Empty

/dev/sda4          0       -       0          0    0  Empty

- sfdisk 명령어로 sda3, sda4 가 현재 0 으로 사이즈가 할당되어 있지 않음을 볼 수 있다.

  (왜 2개 보여주는지는 모르겠다능)



[haebi@localhost ~]$ ls -l /dev/sd*

brw-rw----. 1 root disk 8, 0 12월  2 14:59 /dev/sda

brw-rw----. 1 root disk 8, 1 12월  2 14:59 /dev/sda1

brw-rw----. 1 root disk 8, 2 12월  2 14:59 /dev/sda2 

- /dev 폴더 내에서 sd* 로 리스트 조회 하면 현재 디스크 장치의 목록을 볼 수 있다.

- sda, sdb.. 가 디스크 단위이고, 뒤에 숫자 붙은 것들이 파티션넘버를 의미한다.



여기서 부터 ROOT 유저로 진행 할 것. (sudo 로 안됨)



fdisk 작업 시작!!

여기서는 1개의 디스크에 할당하지 않은 빈 공간을 새 파티션으로 생성 합니다.


1. 현재 장치 상태 확인 및 파티션 설정

[haebi@localhost ~]$ sudo fdisk /dev/sda

Welcome to fdisk (util-linux 2.23.2).


Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.


Command (m for help): m

- 일단 m을 눌러 도움말을 확인합니다.



Command action

   a   toggle a bootable flag

   b   edit bsd disklabel

   c   toggle the dos compatibility flag

   d   delete a partition

   g   create a new empty GPT partition table

   G   create an IRIX (SGI) partition table

   l   list known partition types

   m   print this menu

   n   add a new partition

   o   create a new empty DOS partition table

   p   print the partition table

   q   quit without saving changes

   s   create a new empty Sun disklabel

   t   change a partition's system id

   u   change display/entry units

   v   verify the partition table

   w   write table to disk and exit

   x   extra functionality (experts only)


명령어로 현재 파티션 현황을 조회한다.

Command (m for help): p

- p 를 눌러 파티션 테이블을 확인 합니다.



Disk /dev/sda: 250.1 GB, 250059350016 bytes, 488397168 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0x00016022


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *        2048      489471      243712   83  Linux

/dev/sda2          489472   164763647    82137088   8e  Linux LVM


새 파티션을 생성

Command (m for help): n 

- n 을 눌러 새 파티션을 생성 합니다.



Partition type:

   p   primary (2 primary, 0 extended, 2 free)

   e   extended

primary로 생성

Select (default p): p

디폴트 값 그냥 엔터

Partition number (3,4, default 3): Enter

First sector (164763648-488397167, default 164763648): Enter

Using default value 164763648

Last sector, +sectors or +size{K,M,G} (164763648-488397167, default 488397167): Enter

Using default value 488397167

Partition 3 of type Linux and of size 154.3 GiB is set


Command (m for help): w

- 파티션 타입은 primary 타입 (p)으로 설정 합니다.

- 나머지 항목들은 디폴트 값으로 엔터엔터...

- 그리고 w 를 눌러 저장하고 빠져 나옵니다.



2. 설정된 파티션 확인

[haebi@localhost ~]$ sudo fdisk -l


Disk /dev/sda: 250.1 GB, 250059350016 bytes, 488397168 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0x00016022


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *        2048      489471      243712   83  Linux

/dev/sda2          489472   164763647    82137088   8e  Linux LVM

/dev/sda3       164763648   488397167   161816760   83  Linux


Disk /dev/mapper/centos-root: 50.0 GB, 50000297984 bytes, 97656832 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes



Disk /dev/mapper/centos-swap: 4097 MB, 4097835008 bytes, 8003584 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes



Disk /dev/mapper/centos-home: 30.0 GB, 30001856512 bytes, 58597376 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

- /dev/sda3 이 할당되었다!!



3. 마무리 작업

파티션 테이블 리로드

partprobe


파티션 포맷

sudo mkfs.ext4 /dev/sda3 



축하한다. 이제 파티션 생성 및 포맷까지 완료 되었다.


이 후, 해당 파티션에 대해 폴더 만들고 해당위치로 마운트 하던가, ZFS 같은 파일 시스템 풀의 구성원으로 세팅하여 사용하면 되겠다.




Posted by 해비
2016. 12. 5. 11:24

CentOS 7 파일서버 작업로그 (Samba, ZFS)


0. 설치옵션 : 파일서버 (모두체크)


1. 네트워크 IP 설정


1.1 이더넷 장치 확인

ls -la /etc/sysconfig/network-scripts/ifcfg*


1.2 고정IP 설정

vim /etc/sysconfig/network-scripts/ifcfg-enp0s3

BOOTPROTO="none"

ONBOOT="yes"


# IP Address

IPADDR = "192.168.0.5"

# Subnet Mask

NETMASK = "255.255.255.0"

# Default Gateway

GATEWAY = "192.168.0.1"

# DNS Server

DNS1 = "192.168.0.1"


2. ZFS 설치

https://github.com/zfsonlinux/zfs/wiki/RHEL-%26-CentOS


2.1 ZFS 저장소 설치파일 내려받기

wget http://download.zfsonlinux.org/epel/zfs-release.el7.noarch.rpm


2.2 ZFS 저장소 설치

sudo yum install http://download.zfsonlinux.org/epel/zfs-release$(rpm -E %dist).noarch.rpm


2.3 ZFS 저장소 지문 등록

gpg --quiet --with-fingerprint /etc/pki/rpm-gpg/RPM-GPG-KEY-zfsonlinux


2.4 ZFS 저장소 커널모듈 옵션 사용으로 설정

sudo /etc/yum.repos.d/zfs.repo

dkms enabled=1

kmod enabled=1 

2.5 ZFS 설치

sudo yum install zfs


2.6 커널모듈 설치 (DKMS)

sudo yum install kernel-devel zfs


2.7 모듈 로드

sudo /sbin/modprobe zfs


2.8 ZFS 풀 생성

sudo zpool create haebinas /dev/sda3

[주의] 풀 생성 후 다시 이 명령어 입력하면 기존 풀이 다 날아가므로 주의! 주의!!


2.9 ZFS의 풀에 파일시스템을 생성

zfs create haebinas/data



3. Samba 설정


3.1 Samba공유를 위한 폴더 생성

cd /haebinas/data

mkdir haebi


3.2 권한 설정

chown -R haebi:haebi haebi/


3.3 Samba 환경설정

기존파일 백업

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak


설정파일 에 경로 설정

sudo vim /etc/samba/smb.conf

workgroup = WORKGROUP

dos charset = CP949

display charset = UTF8

unix charset = UTF8


[haebinas]

path = /haebinas/data

writable = yes

valid users = haebi 


3.4 Samba 사용자 등록

sudo smbpasswd -a haebi


3.5 서비스 허용

sudo systemctl enable smb

sudo systemctl enable nmb


3.6 서비스 재시작

sudo systemctl restart smb

sudo systemctl restart nmb


3.7 방화벽 설정

sudo firewall-cmd --permanent --zone=public --add-service=samba

sudo firewall-cmd --reload


3.8 SELinux Samba 허용

chcon -t samba_share_t /haebinas/data

chcon -t samba_share_t /haebinas/data/haebi



4. 부팅시 자동으로 서비스 올라오도록 설정


4.1 자동실행을 위한 rc.local 활성화

sudo chmod +x /etc/rc.d/rc.local


4.2 ZFS 커널모듈 로드 및 생성한 풀 등록 (create 대신 import 사용을 눈여겨 본다!)

sudo vim /etc/rc.local

/sbin/modprobe zfs

zpool import haebinas


참고1 - Samba 방화벽 설정 예

Chain IN_public_allow (1 references)

 pkts bytes target     prot opt in     out     source               destination         

   35  3234 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:137 ctstate NEW

   13  2971 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:138 ctstate NEW

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:139 ctstate NEW

    1    52 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:445 ctstate NEW 





Posted by 해비
2016. 11. 29. 13:23

1. 톰갯 로그 경로 변경

bin/catalina.sh

catalina.out을 찾아서 경로 를 설정한다.


conf/server.xml

directory="logs" 경로변경


conf/logging.properties

${catalina.base}/logs  경로변경



2. catalina.out 이 무한히 커지는 것을 방지 일자별 설정

rotatelogs 를 사용할 것이다. 없으면 아파치 서버의 bin 폴더에서 복사해 온다.


2.1 아파치 서버의 bin폴더 로 부터 rotatelogs를 톰캣 bin에 복사


2.2 tomcat/bin/catalina.sh 파일 열어서아래 부분 찾는다.

  touch "$CATALINA_OUT"

  if [ "$1" = "-security" ] ; then

    if [ $have_tty -eq 1 ]; then

      echo "Using Security Manager"

    fi

    shift

    eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \

      -Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \

      -Djava.security.manager \

      -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \

      -Dcatalina.base="\"$CATALINA_BASE\"" \

      -Dcatalina.home="\"$CATALINA_HOME\"" \

      -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \

      org.apache.catalina.startup.Bootstrap "$@" start \

      >> "$CATALINA_OUT" 2>&1 "&"


  else

    eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \

      -Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \

      -Dcatalina.base="\"$CATALINA_BASE\"" \

      -Dcatalina.home="\"$CATALINA_HOME\"" \

      -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \

      org.apache.catalina.startup.Bootstrap "$@" start \

      >> "$CATALINA_OUT" 2>&1 "&"


  fi


2.3 표시된 부분을 아래와 같이 바꿔준다.

org.apache.catalina.startup.Bootstrap "$@" start 2>&1\

| /home/dev/test/apache-tomcat-8.0.32/bin/rotatelogs "$CATALINA_BASE"/logs/catalina.out.%Y-%m-%d 86400 540   & 

경로는 1번에서 설정한 것 참고하여 적절히 설정한다.


시간단위로 자르고 싶으면 아래 참고

 | /home/dev/test/apache-tomcat-8.0.32/bin/rotatelogs "$CATALINA_BASE"/logs/catalina.out.%Y-%m-%d-%H 3600 540   &



2.4 기타

rotatelogs 사용법 관련

뒤에 오는 숫자 2개에 대한 설명.

앞부분의 숫자는 파일 생성주기를 의미한다. 단위(초), 3600 : 1시간, 86400 : 1일

뒷부분의 숫자는 +09:00 의미한다. 단위(분), 대한민국 : GMT+09:00 (540 min)




Posted by 해비