flowerspring

logroate란 일정 시간을 주기로 원본 로그 파일을 일, 주, 월 단위로 쪼개 저장할 수 있도록 도와주는 프로그램이다.
이렇게 하는 이유는 하나의 로그 파일을 하나의 파일로 저장하게 되면 데이터 용량이 기하급수적으로 쌓이게되면 서버에 로그 파일로 용량이 꽉차 서버가 해야할 다른 서비스를 제대로 제공하지 못하는 경우가 발생한다.
특정 단위로 쪼개어 저장하게 되면 주기적으로 삭제하면 서버 용량도 효율적으로 관리할 수 있으니 리눅스 서버 관리자라면 한번쯤 알아볼 유용한 기능이다.

1. 사용법
 
사용법은 비교적 간단하다. 
/etc/logrotate.d 경로에 로그 설정 파일을 만들어서 해당 위치에 옮겨 두기만 하면 cron의 /etc/cron.daily, /etc/cron.weekly등의 실행주기에 의해서 자동으로 실행된다.


2. 설정 파일
설정 파일은 해당 로그 파일을 생성한 후 vi 편집기를 이용하여 작성 한 후 /etc/logrotate.d에 옮겨 놓으면 된다.    
설정 방법은 로그 파일의 경로를 지정하고 관련된 옵션을 지정한다.
다음은 아파치의 로그 파일을 logrotate를 이용하여 설정한 예제다.

/etc/logrotate.d/httpd
/app/web/apache24/logs/*error_log
/app/web/apache24/logs/*access_log{
        daily
        create 0600 testuser01 testusers
        rotate 90
        dateext
        missingok
        notifempty
        copytruncate
        nocompress
}



3. 옵션


 옵션

설명 

 copy

로그 파일의 카피를 생성한다. 이 옵션을 사용하면, 이미 낡은 로그 파일이 존재하게 되므로, create 옵션은 무효가 된다.

 copytruncate

카피의 작성 후에 로그 파일을 이동하는 대신에, 오리지날의 로그 파일을 아무것도 저장하지 않는 로그로 다시 만든다.

어느 프로그램이 로그 파일을 닫지 못하고, 언제까지 전의 로그 파일에 계속 쓰고 있는 경우 등에 유효한 옵션이다. 다만 파일을 카피하는 순간의 로그가 소실되는 가능성이 높다 .


이 옵션을 넣지 않으면 현재 사용중인 로그를 다른이름으로 move하고 새로운 파일을 생성한다.

 extention

로테이션 후의 백업 로그에 부가하는 확장자(extension)를 지정한다. ext에는 파일의 확장자를 지정한다. compress 옵션을 지정했을 경우에는, 여기서 지정한 확장자(extension)의 뒤에 gz등의 확장자(extension)가 부가된다. 

 ifroate

 만약 로그 파일이 공백이었다고 해도 로테이션 시킨다.

디폴트로 유효하게 되어 있다.

mail 

 로그 파일의 로테이션이 완료한 시점에서, mail 옵션의 인수로서 설정된 메일 주소에 메일을 보낸다.

 nomail

 메일로 통보하지 않는다.

 maillast

mail 옵션 사용시에 로테이션 한 파일을 메일로 출력한다. 

 mailfirst

mail 옵션 사용시에 로테이션 할 예정의 파일을 메일로 출력한다. 

 missingok

로그 파일이 발견되지 않았던 경우, 에러 메세지를 출력하지 않고 다음의 로그 파일의 처리로 이행한다. 

 size

size 옵션의 파라미터로서 준 수치보다 로그 파일의 사이즈가 클 경우, 로그 파일의 로테이션을 실시한다. 

"M"(메가), "K"(킬로)를 지정할 수 있다.

 start

 로테이션 하는 경우에 부가되는 숫자의 확장자를 몇부터 시작하는지를 지정한다. 디폴트에서는 1 이다.

 weekly

 매주 로그를 바꾼다.

 daily

매일 로그를 바꾼다. 

 monthly

 월 단위로 로그를 바꾼다.

 roate 4

 로그를 4세대분 남긴다. weeky를 지정할 경우 4주간의 로그라는 의미이다.

 maxage [n]

 [n]일 이상이 된 로그 파일을 삭제한다.

 create

 (비어있는)신규 로그 파일을 로테이션 한 직후에 작성한다.

 compress

압축한다. 디폴트에서는 압축하지 않게 되어 있으므로, 디스크의 빈 용량을 보고, 유효하게 할지 지정한다. 

 nocompress

압축하지 않는다.

 notifempty

 log 내용이 없으면 rotation 하지 않는다.

 ifempty

 로그파일이 비어있어도 로테이트한다.

 prerotate-endscript

사이의 명령어를 로그파일 처리전에 실행한다. 

 postrotate-endscript

사이의 명령어를 로그파일 처리 후에 실행한다. 

 errors [mail address]

로테이트 실행시 에러가 발생하면 이메일로 통보한다. 



Comment +0


리눅스로 쉘을 실행할때 특정 계정으로 실행해야 할 때가 있다.

사용법은 아래와 같다    

su - 아이디 -c "명령어1; 명령어2; 명령어3"


예를 들어서 tester 계정을 이용하여 jar 파일을 실행한다고 하자. 그럴경우는 다음과 같이 사용한다.

su - tester -c "nohup java -jar /bin/dataservice-process.jar /tmp 2>> /dev/null >> /dev/null &"





Comment +0

CentOS 7/RHEL 7부터는 방화벽을 데몬이 firewalld로 변경되었다. 방화벽 설정을 iptables 명령어 대신 firewall-cmd(콘솔), firewall-config(X-Windows) 명령어를 사용하여 설정한다. 


설치

  1. yum install firewalld
  2. systemctl start firewalld
  3. systemctl enable firewalld


설정

설정파일

/etc/firewalld/zones/public.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <zone>
  3.   <short>Public</short>
  4.   <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accept
  5. ed.</description>
  6.   <service name="dhcpv6-client"/>
  7.   <service name="http"/>
  8.   <service name="ssh"/>
  9.   <service name="https"/>
  10. </zone>


재기동

service iptables restart 대신 아래 명령어 사용

firewall-cmd --rel


zone

사전에 정의된 zone 목록 출력

firewall-cmd --get-zones


전체 존 목록을 상세하게 출력

firewall-cmd --list-all-zones


기존 존  출력

firewall-cmd --get-default-zone


활성화된 존 출력

firewall-cmd --get-active-zone


서비스 목록

firewall-cmd --get-services


permanent로 등록된 서비스 목록

firewall-cmd --permanent --list-all


임의 포트 추가

--add-port=<portid> [-<portid>]/<protocol> 옵션을 사용하여 포트 추가

firewall-cmd --zone=public --add-port=8080/tcp


포트 삭제

--remove-port=<portid> [-<portid>]/<protocol> 옵션 사용

firewall-cmd --zone=public --remove-port=8080/tcp


rich-rule

firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4"  source address="192.168.10.0/24"  port protocol="tcp" port="9000" accept"


방화벽에 포트 추가

  1. firewall-cmd --permanent --zone=public --add-service=http
  2. firewall-cmd --permanent --zone=public --add-service=https

기본 zone은 public이므로 --zone=public 옵션은 생략 가능



출처 : https://www.lesstif.com/pages/viewpage.action?pageId=22053128#RHEL/CentOS7에서방화벽(firewalld)설정하기-설치



Comment +0

서버중 외부로 나가는 트래픽이 막혀있는 서버가 있다면 프록시를 통해 외부로 나가는 요청을 할수가 있습니다.


1. 로그인 세션 동안만 유지되는 방법

텔넷이나 ssh에 로그인 되어있는동안만 프록시를 사용하고 있다면 다음과 같이 사용하면 됩니다.

1
2
3
4
5
6
# 프록시 서버 설정
$ export http_proxy=http://www.yourproxyserver.com:port
$ export https_proxy=http://www.yourproxyserver.com:port
#프록시서버 해제
$ unset http_proxy
$ unset https_proxy

2. 로그인 세션이 종료된 후에도 프록시를 유지시키는 방법

1
2
3
4
5
6
7
8
9
# 여기서는 .bashrc에 작업했지만 .profile, .bash_profile, .bashrc_profile 어디에 설정해도 동일합니다.
$ vi ~/.bashrc
 
#아래내용 추가
export http_proxy=http://www.yourproxyserver.com:port
export https_proxy=http://www.yourproxyserver.com:port
# 저장후
 
$source ~/.bashrc

이후 wget이나 curl로 외부로 요청이 되었을때 데이터를 제대로 가져오면 프록시 설정이 제대로 된것입니다.

1
2
3
$ wget www.daum.net
#혹은
$ curl -0 www.daum.net


[원문출처]http://krespo.net/188

Comment +0

linux 환경에서 구동되는 프로그램을 만들었는데 사용자의 요청에 의해서

리눅스가 처음 시작할때 자동으로 프로그램을 실행하도록 요청을 받을때 간단하게 사용합니다.

 

chkconfig 라는 명령으를 통하여 등록을 할 수도 있지만 리눅스의 부팅과정을 이해해야하며

런레벨에 대한 정보도 학습해야 합니다. 리눅스도 잘 모르는 사용자라 하면 복잡하게 느껴질수도 있습니다.

 

하지만 해당 방법은 crontab을 통하여 등록할 수 있으며 사용방법이 간답합니다.

 

사용법

 

1. 프로그램이 실행하고자 하는 계정으로 로그인 한 후 아래 명령어를 입력하여 편집모드로 들어갑니다.

crontab -e 

 

2. @reboot 명령을 통하여 실행하고 하는 명령어를 입력합니다.

예를 들어서 부팅시 어떤 프로그램을 를 자동으로 실행하기 위한 명령어를 등록하기 위해서서 아래와 같이 입력하였습니다.

 

@reboot /home/test/test/programstart.sh 

 

3. 저장한 후 vi를 닫습니다.

 

crontab은 일반적으로 사용하는것 외에 특정 몇가지 활성화 매계변수가 존재하는데 아래와 같은 것들이 있습니다.

직접 쳐도 되지만 간단하게 사용할 수도 있으니 유용하게 사용되었으면 합니다. 

@reboot = run at boot and reboot only

@yearly  = run at midnight Jan 1 each year (equiv to 0 0 1 1 *)
@annually  = run at midnight Jan 1 each year (equiv to 0 0 1 1 *)
@monthly  = run at midnight on the first day of each month (equiv to 0 0 1 * *)
@weekly  = run at midnight each Sunday (equiv to 0 0 * * 0)
@daily  = run at midnight each day (equiv to 0 0 * * *)
@ midnight  = run at midnight each day (equiv to 0 0 * * *)

@ hourly = run on the first second of every hour (equiv to 0 * * * *) 

Comment +0

crontab format:
{activation parameters} {command #1} ; {optional command #2} ; {optional command #3} ; {etc, commands end on the line ending}

Example:
* * * * * ./folding
This would cause folding to be launched every minute, from your home folder. Very bad, you would end up with 60 copies running by the end of an hour.

Commands are shell commands. Separate multiple commands with a semicolon ";" and end on the line ending.

Activation parameters:
@reboot = run at boot and reboot only
@yearly = run at midnight Jan 1 each year (equiv to 0 0 1 1 *)
@annually = run at midnight Jan 1 each year (equiv to 0 0 1 1 *)
@monthly = run at midnight on the first day of each month (equiv to 0 0 1 * *)
@weekly = run at midnight each Sunday (equiv to 0 0 * * 0)
@daily = run at midnight each day (equiv to 0 0 * * *)
@ midnight = run at midnight each day (equiv to 0 0 * * *)
@ hourly = run on the first second of every hour (equiv to 0 * * * *)
- or -
1 2 3 4 5 = specific time tags
- where -
1 = Minute (of hour) to activate [0-59]
2 = Hour (of day) to activate [0-23]
3 = Day (of month) to activate [1-31 ... 29,30,31 may not activate during all months]
4 = Month (of year) to activate [1-12 or 3-letter names "Jan,Feb,Mar"]
5 = Weekday to activate [0-7 or 3-letter names "Mon,Tue,Wed"]

If 3-letter names are used on Month/Weekday instead of numbers, they are case-insensitive. "Mon" and "mON" are equally acceptable. If numbers are used for the weekday, "0" and "7" are both Sunday and are interchangeable.

Time tags are separated by spaces. Do not use spaces within a tag, this will confuse cron. All five tags must be present. They are a logical AND of each other. There is another space between the last time tag and the first command.

A time tag can be a wildcard "*", which means "all". It can be one value, several values, a range, or a fractional range.

Examples for the Hour column:
8 = one value: execute in the 8 AM hour
5,6,9 = multiple values: execute in the 5, 6, and 9 AM hours
5-8 = range: execute in each hour between 5-8 AM (inclusive)
*/2 = fractional: execute in every other hour. 0 (midnight), 2AM, 4AM, 6AM, etc
3-12/3 = fractional range: execute in every third hour between 3AM and 12PM: 3AM, 6AM, 9AM, 12PM

Example:
5 */3 * * 1-5 cd "desktop/fold1"; ./fold &
This will launch on the 5-minute mark, every third hour, every day, every month, but only on days of the work week (Mon-Fri). It cd's to the Desktop/Folding folder #1, then launches the launch script in nohup mode so folding will keep running.

Comment +0


파일 생성 여부를 모니터링 하기 위해 inotify를 사용하면 생성, 수정, 삭세 등을 모니터링 할 수 있다.
설치 방법은 아래와 같다.


yum install inotify-tools
하지만 알수 없는 에러를 내고 안된다.


해서 http://sourceforge.net/projects/inotify-tools/ 아래 사이트에 가서 inotify-tools-3.14.tar.gz 를 다운로드 받아서 설치를 한다.

설치 파일을 다운로드 한 후 차례대로 다음 명령어를 입력한다.

//wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

tar -zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure
make
make install
updatedb

설치 후
아래 명령어를 입력하여 실제 모니터링 되는지 여부를 확인해본다.
inotifywait -r -m -e modify,create,delete,move,moved_to --format '%:e %w%f' /감시할디렉터리명

해당 명령어는 수정,등록,삭제,이동일 경우 모니터링을 한다.


Comment +0


사용자의 특정 날짜를 입력 받아서 지정된 날짜까지 일별로 loop를 돌면서 처리해야 하는 경우 

해당 쉡을 사용한다.

간단하지만 변수에 담긴 date를 증가 및 감소 하는 법을 알지 못해 고생했다. 


실행방법은 ./dateLoopRunShell.sh 20101120 형태로 사용하면 인자는 yyyymmdd 형태의 시작일을 입력한다.


해당 쉘의 종료일은 쉘을 실행시키는 시점의 날짜가 되며 20101120 ~ 현재일까지 날짜를 출력한다.

20101120

20101121

20101122

20101123   

.

.

.

20150128


echo 부분을 주석처리 하고 해당 부분에 처리할 로직을 넣어서 실행한다.


dateLoopRunShell.sh

#!/bin/bash

echo "HELLO SHELL"


START=$(date --date=$1 +"%Y%m%d")

END=$(date +"%Y%m%d")


CURRENT="$START"


#echo `date -d "$CURRENT 1 day" +"%Y%m%d"`


while [ "$CURRENT" != "$END" ]; do

    echo $CURRENT


     #run shell job


     CURRENT=`date -d "$CURRENT 1 day" +"%Y%m%d"`

done


Comment +0

메신저, DB 등의 각종 프로세스와 포트를 확인하실려면

 

실행 - cmd 에서

 

netstat -ano     라고 치시면 아래와 같은 결과를 확인합니다.

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

Proto  Local Address          Foreign Address        State           PID
TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       848
TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
TCP    0.0.0.0:3389           0.0.0.0:0              LISTENING       804
TCP    127.0.0.1:1025         0.0.0.0:0              LISTENING       1580
TCP    192.168.0.5:139        0.0.0.0:0              LISTENING       4
UDP    0.0.0.0:445            *:*                                    4
UDP    0.0.0.0:500            *:*                                    628
UDP    0.0.0.0:4500           *:*                                    628
UDP    0.0.0.0:11109          *:*                                    3772
UDP    127.0.0.1:123          *:*                                    888
UDP    127.0.0.1:1256         *:*                                    2816
UDP    127.0.0.1:1900         *:*                                    976
UDP    127.0.0.1:2633         *:*                                    3596
UDP    192.168.0.5:123        *:*                                    888
UDP    192.168.0.5:137        *:*                                    4
UDP    192.168.0.5:138        *:*                                    4
UDP    192.168.0.5:1900       *:*                                    976

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

TCP/UDP --> UDP는 네트워크를 이용하는 프로그램 // TCP는 인터넷을 이용하는 프로그램입니다.

 

Local Address  에서 포트를 확인할 수 있습니다.  문제는 PID 확인인데 ... 이것만 봐서는 어떤 프로그램인 지 알수가 없습니다.

 

PID로 프로그램 확인하기

cmd 모드에서 아래와 같이 명령어를 입력합니다.

 

tasklist

---------결과 ----------------

이미지 이름                  PID 세션 이름           세션#  메모리 사용
========================= ====== ================ ======== ============
System Idle Process            0 Console                 0         16 K
System                         4 Console                 0        296 K
smss.exe                     500 Console                 0        404 K
csrss.exe                    548 Console                 0     21,556 K
winlogon.exe                 572 Console                 0      5,964 K
services.exe                 616 Console                 0      3,604 K
lsass.exe                    628 Console                 0      2,992 K
svchost.exe                  804 Console                 0      5,220 K
svchost.exe                  848 Console                 0      4,800 K
svchost.exe                  888 Console                 0     89,336 K
svchost.exe                  948 Console                 0      4,044 K
svchost.exe                  976 Console                 0      4,196 K
spoolsv.exe                 1020 Console                 0      6,372 K
nvsvc32.exe                 1156 Console                 0      4,168 K
alg.exe                     1580 Console                 0      3,664 K
ctfmon.exe                  1676 Console                 0      5,212 K
EnMixCPL.exe                1388 Console                 0     13,824 K
ctfmonnpe.exe               1424 Console                 0      7,860 K
rundll32.exe                1364 Console                 0      5,172 K
RaUI.exe                    1972 Console                 0      9,104 K
conime.exe                  2792 Console                 0      3,768 K
usnsvc.exe                  2956 Console                 0      2,784 K
npkcmsvc.exe                2748 Console                 0      1,860 K
explorer.exe                4040 Console                 0     75,796 K
svchost.exe                 3800 Console                 0      4,264 K
dkznote.exe                 3772 Console                 0     13,056 K
INISAFEWeb60Tray.exe         468 Console                 0      4,924 K
Hwp.exe                     1212 Console                 0      5,172 K
iexplore.exe                3596 Console                 0     76,820 K
WLLoginProxy.exe            1328 Console                 0      7,908 K
AYAgent.aye                 3868 Console                 0      9,380 K
AYServiceNT.aye             3248 Console                 0     41,516 K
cmd.exe                      692 Console                 0      2,776 K
taskmgr.exe                 1896 Console                 0      2,860 K
wuauclt.exe                 1124 Console                 0     31,264 K
wmiprvse.exe                2392 Console                 0      6,444 K
tasklist.exe                1404 Console                 0      4,376 K

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

이게 어떤 서비스(데몬)와 연결되어 있는 지 알려면 다음과 같이 명령을 주면 됩니다.

 

tasklist /svc

 

이미지 이름                  PID 서비스
========================= ====== =============================================
System Idle Process            0 N/A
System                         4 N/A
smss.exe                     500 N/A
csrss.exe                    548 N/A
winlogon.exe                 572 N/A
services.exe                 616 Eventlog, PlugPlay
lsass.exe                    628 PolicyAgent, ProtectedStorage, SamSs
svchost.exe                  804 DcomLaunch, TermService
svchost.exe                  848 RpcSs
svchost.exe                  888 AudioSrv, Browser, CryptSvc, Dhcp, dmserver,
                                 ERSvc, EventSystem,
                                 FastUserSwitchingCompatibility, helpsvc,
                                 HidServ, lanmanserver, lanmanworkstation,
                                 Netman, Nla, RasMan, Schedule, seclogon,
                                 SENS, SharedAccess, ShellHWDetection,
                                 srservice, TapiSrv, Themes, TrkWks, W32Time,
                                 winmgmt, wscsvc, wuauserv
svchost.exe                  948 Dnscache
svchost.exe                  976 LmHosts, RemoteRegistry, SSDPSRV
spoolsv.exe                 1020 Spooler
nvsvc32.exe                 1156 NVSvc
alg.exe                     1580 ALG
ctfmon.exe                  1676 N/A
EnMixCPL.exe                1388 N/A
ctfmonnpe.exe               1424 N/A
rundll32.exe                1364 N/A
RaUI.exe                    1972 N/A
conime.exe                  2792 N/A
usnsvc.exe                  2956 usnjsvc
npkcmsvc.exe                2748 npkcmsvc
explorer.exe                4040 N/A
svchost.exe                 3800 stisvc
dkznote.exe                 3772 N/A
Hwp.exe                     1212 N/A
iexplore.exe                3596 N/A
WLLoginProxy.exe            1328 N/A
AYAgent.aye                 3868 N/A
AYServiceNT.aye             3248 ALYac_PZSrv
cmd.exe                      692 N/A
taskmgr.exe                 1896 N/A
wmiprvse.exe                2336 N/A
tasklist.exe                4048 N/A

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

svchost.exe가 가장 많은 역할과 서비스와 연결되어 있음을 알 수 있습니다


[출처]http://asfreeas.blogspot.kr/2009/09/windows-%EC%89%98%EC%97%90%EC%84%9C-%EA%B0%81%EC%A2%85-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%ED%8F%AC%ED%8A%B8-%ED%99%95%EC%9D%B8xp-server.html

Comment +0

ssh를 이용하여 원격지에 접속할 경우 비밀번호를 묻지 않게 하려면..


 >ssh-keygen -t rsa


이렇게 하면 다음과 같은 메세지가 나온다.


Enter file in which to save the key (/root/.ssh/id_rsa):      Enter
Enter passphrase (empty for no passphrase):                  Enter
Enter same passphrase again:                                       Enter


>ls -l ~/.ssh


id_rsa, id_rsa.pub 파일이 두개 생성이 되었을텐데 id_rsa.pub 파일을 원격지 파일로 ftp, scp를 이용하여 

전송한다. 전송할 경우 파일명은 id_rsa.pub.[hostname or ip]를 두어 구별이 가능하도록 한다.


scp ~/.ssh/id_rsa.pub.[hostname or ip] <userid>@<target ip>:.ssh/id_rsa.pub.[hostname or ip]


파일이 정상적으로 전송이 되었으면 

원격지 파일로 이동하여 


> cd .ssh 


이동을 하게 되면 해당 파일이 제대로 넘어 왔는지 확인한다.

해당 파일이 존재하면 해당 파일의 값을 authorized_keys로 추가하면 된다. 이때 authorized_keys 파일은 백업해둔다.

만약 authorized_keys 파일이 없다면 새로 생성하여 준다.


>cat id_rsa.pub.[hostname or ip] >> authorized_keys


이제 접속을 확인한다.

 

일반적인 방법으로 위의 방식으로 하면 되는데 혹 안되는 경우가 있었다.

테스트 겸 해서 같은 서버에서 같은 서버로 테스트를 했는데.. 안된다.. 

참고로 이렇게 했는데도 안되는 경우가 발생 할 경우

chmod 0600 authorized_keys 하고 해본다.

 


Comment +0