반응형




+톰캣을 root 계정이 아닌 tomcat 계정으로 실행 하기

우선 tomcat 계정을 생성한다.
# useradd -M tomcat

톰캣 계정 설정 확인
계정을 생성하면 home 디렉토리가 /home/tomcat으로 설정 되며, 이를 CATALINA_HOME으로 변경해준다.

# grep tomcat /etc/passwd
tomcat:x:503:503::/usr/local/tomcat:/bin/bash

실행 스크립트 작성하기 (간략버전)
# vi /etc/rc.d/init.d/tomcat

아래 내용을 작성한다.  ==> 서비스 재시작(restart)시 문제가 발생할 수 있음!!! 주의! (binding fail.) => 서비스 shutdown이 완전히 완료되었는지 확인하는 작업이 필요함.

(아래는 간략 버전이므로 restart는 정확성이 보장 안됨. 다음에 나오는 update 버전 참고)
#!/bin/bash
# Startup script for the Tomcat Server
# chkconfig: 345 50 50
# description: Tomcat is a Web application server.
# processname: java
# directory : CATALINA_HOME=/usr/local/tomcat
. /etc/profile
case "$1" in
    start)
        echo "Starting tomcat: "
        su - tomcat -c $CATALINA_HOME/bin/startup.sh
        ;;
    stop)
        echo "Shutting down tomcat: "
        su - tomcat -c $CATALINA_HOME/bin/shutdown.sh
        ;;
    restart)          # 안전하지 않으니 restart는 하지 말 것.
        echo "Restarting tomcat: "
        su - tomcat -c $CATALINA_HOME/bin/shutdown.sh; su - tomcat -c $CATALINA_HOME/bin/startup.sh
        ;;
    *)
        echo "Usage: service tomcat {start|stop|restart}"
        exit 1
esac
exit 0

소유권을 tomcat으로 변경
# chown tomcat:tomcat tomcat 

tomcat 스크립트에 실행권한 주기
#chmod 755 tomcat

runlevel에 등록
chkconfig에서 add 될 수 있도록 스크립트에 "# chkconfig: 345 50 50" 를 추가한다.
#chkconfig --add tomcat


실제로 리부팅시 톰캣이 tomcat 계정으로 실행되는지 확인한다
# reboot

톰캣 실행시 데몬실행이 tomcat으로 되어 있는지 확인한다.  tomcat이 아닌 root인경우는 잘못된 경우임
# ps -ef | grep tomcat

톰캣 프로세스 수동 시작 및 종료
# service tomcat start
# service tomcat stop



반응형


+정규식으로 스트링의 일부를 찾아 추출한다.



cpp 정규식 검색/매칭

- 스트링에서 특정 class명으로 나온 태그에서 href의 url 부분만 추출하기.
-1단계
class="i-e" 로 시작하고, <, > 문자가 나오기 전까지 중간 부분 추출.
-2단계
추출된 부분에서 href=으로 시작하고 ", " 사이에 있는 중간 부분 추출.

regex_search() 함수로 찾는다. match 결과의 [0]은 패턴이 맞는 부분의 전체 스트링을 추출.
[1], [2], 등은 그 다음에 패턴에서 ()로 싸인 부분 순서대로 추출.


#include <iostream>

#include <string>

#include <regex>

using namespace std ;

string html="<a class=\"i-e\" href=\"DATA IM INTERESTED IN\">\n\

<a class=\"chrome\" href=\"nono chrome\">\n\

<a class=\"i-e\" href=\"ie like1\">\n\

<a class=\"chrome\" href=\"nono chrome\">\n\

<a class=\"i-e\" href=\"ie like2\">\n\

<a class=\"chrome\" href=\"nono chrome\">\n\

<a class=\"chrome\" href=\"nono chrome\">\n\

<a class=\"i-e\" style=\"font-size:10pt;\" href=\"ie like3\">\n\

<a class=\"chrome\" href=\"nono chrome\">\n\

<a class=\"chrome\" href=\"nono chrome\">\n\

<a class=\"i-e\" href=\"ie like4\"> <a class=\"i-e\" href=\"ie like5\">\n\

";

int main() {

smatch m, m2 ;

regex e ( "class=\"i-e\"([^<>]+)>" ) ; // get: href="ie like"

regex e2 ( "href=\"(.+)\"" ) ; // get ie like

bool r, r2 ;

string content ;

int start=0 ;

cout << "input html : " << html << endl ;

do {

content = html.substr(start) ;

// cout << "content:"<<content<<endl;

r=regex_search(content, m, e) ;

if ( r ) {

// cout << "search: " << r << endl ;

// cout << "str: " << m.position() << " "<< m.str() << endl ;

cout << "match : " << m[1] << endl ;

r2 = regex_search((string)m[1], m2, e2) ;

if ( r2 ) {

cout << " URL : " <<m2[1]<<endl ;

}

}

start+=m.str().length()+m.position();

} while( r );

return 0 ;

}

g++ test_regex2.cpp
./a.out

input html : <a class="i-e" href="DATA IM INTERESTED IN">

<a class="chrome" href="nono chrome">

<a class="i-e" href="ie like1">

<a class="chrome" href="nono chrome">

<a class="i-e" href="ie like2">

<a class="chrome" href="nono chrome">

<a class="chrome" href="nono chrome">

<a class="i-e" style="font-size:10pt;" href="ie like3">

<a class="chrome" href="nono chrome">

<a class="chrome" href="nono chrome">

<a class="i-e" href="ie like4"> <a class="i-e" href="ie like5">


match :  href="DATA IM INTERESTED IN"

 URL : DATA IM INTERESTED IN

match :  href="ie like1"

 URL : ie like1

match :  href="ie like2"

 URL : ie like2

match :  style="font-size:10pt;" href="ie like3"

 URL : ie like3

match :  href="ie like4"

 URL : ie like4

match :  href="ie like5"

 URL : ie like5


'Develop > C&CPP' 카테고리의 다른 글

Vector 3  (0) 2018.05.23
Vector 2  (0) 2018.05.18
Vector 1  (0) 2018.05.16
gdb로 디버깅하기  (0) 2018.03.06
mutex 동기화 예제  (1) 2018.03.06
반응형

자주 사용하는 이클립스(eclipse) 단축키


개발툴에서는 단축키 사용이 필수인데, 여러가지를 쓰다보면 가끔 기억이 나지 않을 때가 종종 있습니다. 주로 많이 쓰는 이클립스 단축키들을 정리해봤습니다.



+ 일반적인 기능 단축키

-동일한 파일을 2개 창으로 보기
ctrl+{    ; 좌우로 보기 (ctrl+shift+{) 

-파일2개를 창2개로 보기
추가로 열 파일을 탭에서 드래그하여 원하는 윈도우 박스 위치에 놓는다.


(컨, ^ - 컨트롤 키 ,  쉡-쉬프트 키, @-알트 키)

컨쉽+O ; auto import
컨쉽+T ; 클래스 찾기
컨쉽+위/아래 ; 메소드 이동(위, 아래)
컨쉽+스페이스 ; 파라미터 보기
컨쉽+F ; 자동 코드 들여쓰기 정리. form feed.

컨+O ; 현재소스내에서 메소드나 필드로 이동 ; method
컨+T ; class tree보기/이동 상속관계 ; tree

컨+K ; 찾는 문자열 블록선택후, 연속으로 찾기. 반대방향은 쉽 추가.

컨+D ; delete line
컨+I ; auto indent (one line)



+ 가장 필요한 단축키.  
Code Assit
추적
돌아가기
실행

@+방향키(왼쪽화살표) ; 이전 커서 위치로 이동!!!!!! 소스추적하다가 되돌아갈때 필수!
^+Space ; 코드 파라미터 보기  (sysout 자동풀기)
(리눅스에서는 @+/ )

F3 or  ^클릭 ; 함수 추적
^+F11 ; 실행
^F6 ; 이전 에디터창(소스). 
^Q ; 소스 마지막 수정위치로 이동
^+SHIFT+/ ; 블록 주석처리
^+  / ; 주석처리
^+SHIFT+F ; 코드 정리 (인덴테이션)



+이클립스 (MAC)맥에서 단축키  (Com - 커맨드 키)

(@대신Com)+방향키 ; 이전 커서 위치로 이동
(Com추가)+^+Space ; 코드 파라미터 보기
F3 or  ^+클릭 ; 추적
(FN추가)+^+F11 ; 실행
^F6 ; 이전 에디터창(소스). 
^Q ; 소스 마지막 수정위치로 이동
^H ; 전체 검색

^K ; 다음 찾기. 이전찾기 ^+SHIFT+K




+ Recent posts