2014년 8월 19일 화요일

pid 값으로 강제 종료 스크립트.

service mysqld stop으로 mysql이 죽지를 않는다.

pkill mysqld 도 안 먹는다.

killall mysqld 도 안 먹는 다.

kill -9 pid 로는 먹는다.

근데 전부 다 죽여줘야 한다.

스크립트를 찾았다. 역시 있었다.
#!/bin/bash

[ -z "$1" ] && echo "Usage : Input Process .......... Please [scriptFileName ProcessName]" && exit

process_id=`ps -ax | grep "$1" | grep -vw "grep" | grep -vw $$ | awk '{print $1}'`

if [ -z "$process_id" ];then
echo "+-------------------------------------------------------------+"
echo "Not Found Process (입력하신 프로세스를 찾지 못했습니다.) ...... Done"
echo "+-------------------------------------------------------------+"
exit
else
process_id_number=`ps -ax | grep "$1" | grep -vw "grep" | grep -vw $$ | awk '{print $1}'`

for i in ${process_id_number} ;do
kill -9 $i &> /dev/null
printf "%-40s %-s\n" "$i PID Killed" "$(echo -ne "[ \\033[01;32m OK \\033[0m ]")"
done
sleep 2;
echo "+-------------------------------------------------------------+"
echo "Process Kill OK (프로세스가 강제적으로 종료 되었습니다.) ...... Done"
echo "+-------------------------------------------------------------+"
fi

출처

2014년 8월 14일 목요일

sftp 접속 안되는 현상.

sftp 접속시 접속이 제대로 안된다.

에러메시지도 없다. 그냥 안된다.

확인 결과는 ssh 로 접속 할 때 아래처럼 에러메시지가 나오는 데, 그냥 무시하고 사용하고

있었다.
-bash: /usr/etc/jfbterm_profile: 그런 파일이나 디렉토리가 없음

ssh 는 에러메시지가 나와도 제대로 접속이 되지만, sftp 는 에러메시지가 나오면 제대로 되

지 않는다.

2014년 8월 13일 수요일

apache 2.0.x 버젼 startssl 자동.

apache 2.2.x 버젼 이상이 아닌경우 ssl 적용 아파치 실행은
./apachectl startssl

위처럼 startssl 로 실행해야 ssl 이 적용된 아파치가 실행된다.



그냥 start 만으로 ssl 이 실행되도록 스크립트를 변경하자.
vim /usr/bin/apachectl

...
case $ARGV in
start)
    $HTTPD -k start -DSSL
    ERROR=$?
    ;;
stop|restart|graceful)
    $HTTPD -k $ARGV
    ERROR=$?
    ;;
startssl|sslstart|start-SSL)
    $HTTPD -k start -DSSL
    ERROR=$?
    ;;
configtest)
    $HTTPD -t
    ERROR=$?
...



start 인수가 들어오면 원래는 $HTTPD -k $ARGV를 실행 하게끔 되어 있지만,
따로 빼내어 $HTTPD -k start -DSSL 를 실행하도록 수정 하였다.

2014년 8월 12일 화요일

oracle sql developer 소켓 에서 읽을 데이터 가 없습니다

오라클 11g express 설치.

sql developer로 접속시 소켓 에서 읽을 데이터 가 없습니다.
(GLOBAL_DBNAME = XE)

위 코드 추가하니 접속 성공

아래는 전체 listener.ora 내용
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = XE)
(SID_NAME = XE)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xxx.xxx.xxx)(PORT = 1521))
)
)

DEFAULT_SERVICE_LISTENER = (XE)

2014년 8월 6일 수요일

bitnami redmine 설치 에러...

bitnami redmine 윈도우용으로 설치를 시도.

여기를 참고함.

설치 마침까지 정상적으로 나오고 index 페이지 까지 열림

index 페이지에서 Access Bitnami Redmine Stack 를 클릭해서 들어감.

Internal error 500 에러 발생.

D:\Bitnami\redmine-2.5.2-1\apps\redmine\htdocs\log\production.log 로그 확인.
ActiveRecord::StatementInvalid (Mysql2::Error: Table 'bitnami_redmine.settings' doesn't exist: SHOW FULL FIELDS FROM `settings`):
app/models/setting.rb:226:in `check_cache'
app/controllers/application_controller.rb:98:in `user_setup'

이런 에러...

mysql 확인 해보니 redmine DB 생성이 안되어 있음.

D:\Bitnami\redmine-2.5.2-1\apps\redmine\scripts>redmineini.bat 실행

중간에 에러 나옴.
rake aborted!
D:/Bitnami/redmine-2.5.2-1/apps/redmine/htdocs/db/migrate/001_setup.rb:291: inva
lid multibyte char (UTF-8)
D:/Bitnami/redmine-2.5.2-1/apps/redmine/htdocs/db/migrate/001_setup.rb:291: inva
lid multibyte char (UTF-8)
D:/Bitnami/redmine-2.5.2-1/apps/redmine/htdocs/db/migrate/001_setup.rb:291: synt
ax error, unexpected end-of-input, expecting keyword_end
:firstname => "

D:/Bitnami/redmine-2.5.2-1/apps/redmine/htdocs/db/migrate/001_setup.rb 확인 해보니,
firstname 부분에 깨진 문자가 보임.

설치시 ID, 패스워드, 이름 입력하는 부분에서 이름을 한글로 '관리자'로 설정하였는데,  그 부분인 것으로 보임.

해당 부분을 영어 'admin_first' 로 변경 후 재 실행.

제대로 설치 완료 됨.



결론 : 초기 설치시 한글 쓰지 말기를...

2014년 7월 11일 금요일

gmail에서 보낸 메일이 안 들어 올 때

gmail 보낸 메일이 들어 오지 않는다.

메일서버의 로그를 확인 해 봤도, 받았다는 로그가 보이지 않는다.

한 하루 반정도 지나니까 리턴메일이 왔다.
This is an automatically generated Delivery Status Notification

THIS IS A WARNING MESSAGE ONLY.

YOU DO NOT NEED TO RESEND YOUR MESSAGE.

Delivery to the following recipient has been delayed:

     test@test.com

Message will be retried for 2 more day(s)

Technical details of temporary failure:
Google tried to deliver your message, but it was rejected by the server for the recipient domain xxxxxxxxxxxxxx. [xxx.xxx.xxx].

The error that the other server returned was:
454 TLS missing certificate: error:0200100D:system library:fopen:Permission denied (#4.3.0)

----- Original message -----

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;

...

검색해 보니 TLS 셋팅 안되어 있어서 발생한 문제.

아마도 저번에 587 포트를 열어 놓은 적이 있는 데, 아마도 그 때문인 것 같다.
이것은 받는 메일서버에 tls 세팅이 제대로 되지 않은경우이다.
qmail 의 경우 아래와 같이 해결한다.
1. 모듈확인
#ldd /var/qmail/bin/qmail-smtpd  (명령으로 ssl 모듈이 추가되어 있는지 확인후 )
2. 키를 생성한다.
#openssl req -newkey rsa:1024 -x509 -nodes -days 3650 -out /var/qmail/control/servercert.pem -keyout /var/qmail/control/servercert.pem
키 생성시 Common Name 은 도메인명을 정확히 기록한다.

#위의 명령어 실행시 나오는 내용
Country Name (2 letter code) [GB]:KR
State or Province Name (full name) [Berkshire]:Seoul
Locality Name (eg, city) [Newbury]:Jungu
Organization Name (eg, company) [My Company Ltd]:Company
Organizational Unit Name (eg, section) []:QnA Team
Common Name (eg, your name or your server's hostname) []:서버의 설정된 도메인 명.
Email Address []:관리자 이메일


3. 권한변경
#chmod 640 /var/qmail/control/servercert.pem
4. 소유자/그룹변경
#chown vpopmail.vchkpw /var/qmail/control/servercert.pem => 혹은 (qmaild.qmail)
5. 복사
#ln -s /var/qmail/control/servercert.pem /var/qmail/control/clientcert.pem
6. ciphers 만들어주기...
#openssl ciphers > /var/qmail/control/tlsclientciphers
#openssl ciphers > /var/qmail/control/tlsserverciphers

pem 파일 내용 확인은 아래와 같다.
#openssl x509 -text -noout -in servercert.pem

메일서버를 테스트는...
#openssl s_client -crlf -starttls smtp -connect localhost:25
에러 없으면 된다...
아래도 해보자.
#telnet localhost 25
ehlo localhost
starttls

gmail에서 다시 발송 후 도착 여부 확인.
출처

2014년 7월 8일 화요일

httpd(아파치)최적화. MaxClient 값 구하기

httpd(아파치) 튜닝에서 가정 중요한 부분은

MaxClient 값과 KeepAlive 라고 본다.
그중 KeepAlive 는 정적 파일을 경우 Off, 동적 파일을 일 경우 On 이 좋다고 한다.

웬만한 httpd 서버는 php 와 연동하여 사용하기 때문에 On으로 설정하는 게 좋을 것 같다.
문제는 MaxClient 값을 어떻게 구할 것인가이다.

MaxClient 값 구하기 스크립트
#/bin/sh

TotalMem=`free -m | grep Mem: | awk {'print $2'}`
TotalMem80per=$(echo "$TotalMem*0.8"|bc)
#pa aux 의 6번째 값이 RSS 인데, 이 값을 가져옴.
TotalHttpMem=`ps aux | grep httpd | grep -v grep | awk '{print $6}' | awk '{total = total + $1} END {print total/1024}'`
httpCount=`ps aux | grep httpd | grep -v grep | wc -l`
averageHttpMem=$(echo "$TotalHttpMem / $httpCount" | bc)
MaxClient=$(echo "$TotalMem80per / $averageHttpMem" | bc)

echo "총 메모리 : " $TotalMem
echo "총 메모리의 80% : " $TotalMem80per
echo "http use mem total : "$TotalHttpMem
echo "http process count : "$httpCount
echo "http use mem average : "$averageHttpMem

echo "MaxClients   " $MaxClient

내가 세운 공식은 다음과 같다.
총메모리의 80% / httpd의 평균 메모리 사용량

서버 자체가 웹서버 전용이라면 메모리의 80%는 빼도 상관 없을 듯 하다.

참고 사이트

http://openlife.tistory.com/340
http://jjosh.tistory.com/15
https://kldp.org/node/28074
http://helloworld.naver.com/helloworld/132178

RES의 의미
RES  : 물리적인 메모리를 사용하는 크기
VIRT  : SWAP 영역에서 사용하는 메모리 + shared + swapped를 합친것

http://www.tuning-java.com/454



----

기타 찾아본 최적화 스크립트

https://github.com/gusmaskowitz/apachetuner

https://github.com/gusmaskowitz/apachebuddy.pl

http://surniaulula.com/2012/11/09/check-apache-httpd-mpm-config-limits/