2021년 3월 20일 토요일
netstat말고 ss명령을 사용합시다.
2021년 1월 27일 수요일
단락 연산자(short-circuit operator)
리눅스에서 명령어를 연속 해서 사용 할 때가 있다.
보통 || 와 &&을 사용한다. 이를 단락 연산자(short-circuit operator)라고 한다.
첫번째 명령어를 실행하고 곧이어 두번째 명령어를 실행하는 역할이다.
예제는 다음과 같다.
[root@localhost ~]# true || echo 'ok' [root@localhost ~]# false || echo ok ok [root@localhost ~]#
||는 앞의 명령어 성공하면 뒤의 echo 'ok'는 실행하지 않는다.
앞의 명령이 실패하면 뒤의 echo 'ok' 명령를 실행한다.
&&은 ||과 반대이다. 앞의 명령이 성공하면 뒤의 명령을 실행한다.
앞의 명령이 실패하면 뒤의 명령을 실행하지 않는다.
[root@localhost ~]# true && echo 'ok' ok [root@localhost ~]# false && echo 'ok' [root@localhost ~]#
앞 명령어와 상관없이 실행하고자 할 때는 ;를 쓴다.
[root@localhost ~]# echo '1ok'; echo '2ok' 1ok 2ok [root@localhost ~]#
2017년 11월 24일 금요일
리눅스 ls 자주 쓰는 옵션 정리.
기본적으로 전부 붙임. 더 자세한 건 man
#디렉토리만
ls -d */
ls -l | grep `^d'
#파일만
ls -l | egrep -v '^d'
#파일 크기별 (큰 파일부터...)
ls -lS
#파일 크기별 역순(작은 파일 부터...)
ls -lSr
#일자 전체 출력
ls --full-time
ls -l --time-style=full-iso
#크기를 읽기 좋게(e.g., 1K 234M 2G)
ls -lh
#하위 디렉토리 포함
ls -lR
timestamp별 정렬
#접속일자 순
ls -ult
#접속일자 역순(-r 옵션이 순서를 reverse함)
ls -ultr
#변경일자 순
ls -clt
#변경일자 역순(-r 옵션이 순서를 reverse함)
ls -cltr
#수정일자 순
ls -lt
#수정일자 역순(-r 옵션이 순서를 reverse함)
ls -ltr
접속일자, 수정일자, 변경일자가 뭔지는 여기서 확인.
리눅스의 timestamp
예전 글에도 ctime과 mtime의 차이점에 대해 썼었는데, 그에 대한 연장선이다.
Access(atime) - 파일을 마지막으로 읽은 시간
Modify(mtime) - 파일 내용이 마지막으로 바뀐 시간
Change(ctime) - 파일의 메타 데이터가 마지막 으로 변경된 시간 (e.g. 권한)
stat 명령어로 timestamp를 확인 할 수 있다.
toucth 명령어로 test.txt 파일을 하나 생성 후 확인
[root@df test]# touch test.txt
[root@df test]# stat test.txt
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 일반 빈 파일
Device: fd00h/64768d Inode: 68752651 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-11-23 17:36:11.380000000 +0900
Modify: 2017-11-23 17:36:11.380000000 +0900
Change: 2017-11-23 17:36:11.380000000 +0900
Birth: -
처음 생성시 Access, Modify, Change가 모두 동일 한 걸 볼 수 있다.
touch 명령어로 Access 수정 후 확인.
[root@df test]# touch -a -d '1 Jan 2000 12:34' test.txt
[root@df test]# stat test.txt
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 일반 빈 파일
Device: fd00h/64768d Inode: 68752651 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2000-01-01 12:34:00.000000000 +0900
Modify: 2017-11-23 17:36:11.380000000 +0900
Change: 2017-11-23 17:39:18.467000000 +0900
Birth: -
touch 명령어로 Modify 수정 후 확인.
[root@df test]# touch -m -d '1 Jan 2006 12:34' test.txt
[root@df test]# stat test.txt
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 일반 빈 파일
Device: fd00h/64768d Inode: 68752651 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2000-01-01 12:34:00.000000000 +0900
Modify: 2006-01-01 12:34:00.000000000 +0900
Change: 2017-11-23 17:39:52.616000000 +0900
Birth: -
권한 변경후 확인(Change)
[root@df test]# chmod 777 test.txt
[root@df test]# stat test.txt
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 일반 빈 파일
Device: fd00h/64768d Inode: 68752651 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2000-01-01 12:34:00.000000000 +0900
Modify: 2006-01-01 12:34:00.000000000 +0900
Change: 2017-11-23 17:40:18.557000000 +0900
Birth: -
cat 명령어로 해당 파일을 읽어 확인.
[root@df test]# cat test.txt
[root@df test]# stat test.txt
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 일반 빈 파일
Device: fd00h/64768d Inode: 68752651 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-11-23 17:48:21.985000000 +0900
Modify: 2006-01-01 12:34:00.000000000 +0900
Change: 2017-11-23 17:40:18.557000000 +0900
Birth: -
Access 만 변경 된 걸 볼 수 있다.
echo 명령어로 내용 추가 후 확인.
[root@df test]# echo test >> test.txt
[root@df test]# stat test.txt
File: `test.txt'
Size: 5 Blocks: 8 IO Block: 4096 일반 파일
Device: fd00h/64768d Inode: 68752651 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-11-23 17:48:21.985000000 +0900
Modify: 2017-11-23 17:50:20.241000000 +0900
Change: 2017-11-23 17:50:20.241000000 +0900
Birth: -
Access는 그대로, Modify와 Change가 같이 변했다.
그니까 find로 파일 내용이 변경된 파일을 찾으려면 mtime을 이용해야 한다.
# 수정한지 20일 이상( -mtime +20 )된 파일과 디렉토리
find . -mtime +20 -ls
2016년 12월 28일 수요일
fail2ban ip 영구 차단
/etc/fail2ban/jail.conf 중 bantime = -1(영구차단)로 설정
예전에는 아마도 fail2ban 재시작시 banip가 없어지게끔 되어 있었나보다.
현재는 (Fail2ban v0.9.5) sqlite에 DB로 저장 되어 있기 때문에 다른 설정이 필요치 않다.
다만 재시작 시 로딩이 조금 느리다..
sqlite 파일 위치
[root@df log]# fail2ban-client get dbfile
Current database file is:
`- /var/lib/fail2ban/fail2ban.sqlite3
table 확인
[root@df log]# sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 .table
bans fail2banDb jails logs
차단된 명령어는 bans란 테이블에 들어가 있다. 그중에 ip값만 가져오면 차단된 ip 목록을 확인 가능하다.
중복된 것도 있기 때문에 distinct를 사용한다.
[root@df log]# sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "select distinct ip from bans;"
1.206.220.154
1.31.67.224
1.34.190.13
101.25.28.112
103.243.107.193
103.243.54.168
104.43.161.37
...
ps.
테스트 서버에 findtime = 60, maxretry = 3 으로 설정 하고 ssh 포트를 기본포트(22)로 변경 하고 났더니, 하루에 100개이상의 공격이 들어온다... ㅎㄷㄷ;
2016년 12월 7일 수요일
디렉토리를 심볼릭링크 생성시 여러개가 만들어지는 원인.
명령을 두번 실행하면 첫번째 명령에서 만들어진 '심볼릭 링크 디렉토리'안에 또하나의 파일이 생긴다.
세번째부터는 깨진 파일이라도 있으니까 그 아래로는 더 이상 생성되지 않는다.
이럴 때는 -n 명령을 써보자
-n 옵션의 설명은 다음과 같다.
-n, --no-dereference
treat LINK_NAME as a normal file if it is a symbolic link to a directory
디렉토리의 심볼릭 링크면 일반 파일로 취급한다고 한다.
테스트 해보자.
n 옵션이 없으면 아래와 같이 두번까지 정상 실행되며, 세번째부터 에러가 나온다.
dirSym 으로 들어가 보면 깨진 dirSrc 심볼릭 링크가 만들어져있다.
[root@df tmp]# mkdir dirSrc
[root@df tmp]# ln -s dirSrc dirSym
[root@df tmp]# ln -s dirSrc dirSym
[root@df tmp]# ln -s dirSrc dirSym
ln: failed to create symbolic link `dirSym/dirSrc': 파일이 있습니다
dirSym 링크를 지우고 n 옵션을 주고 다시 실행하면 아래와 같이 두번째에 에러가 발생한다.
[root@df tmp]# rm dirSym
rm: remove 심볼릭 링크 `dirSym'? y
[root@df tmp]# ln -sn dirSrc dirSym
[root@df tmp]# ln -sn dirSrc dirSym
ln: failed to create symbolic link `dirSym': 파일이 있습니다
결론 : 디렉토리를 symbolic link로 만들 때는 n 옵션을 추가해서 만들자.
ln -sn src dest
2016년 11월 25일 금요일
logrotate가 안될 때...
무려 1.8G!
-rw-------. 1 root root 1915638280 2016-11-25 09:01 messages
접근 시도가 많은 것으로 알고 failer들 차단하고 나섰는 데, 뭔가 이상하다.
로그 파일이 messages밖에 없다. 기본적으로 rotate가 돌아서 messages.1이나
messages-날짜, 이런 형식으로 있어야 되는 데, 없다.
rotate가 안되고 있다!!.
아래 명령어로 확인. -d 옵션이 debug 모드.
/usr/sbin/logrotate -d /etc/logrotate.conf
출력 내용중 아래와 같이 이상점 발견
considering log /var/log/messages
log needs rotating
로테이트가 필요없다고!? 2G에 육박하고 있는 데 무슨 소리야.
logrotate는 /var/lib/logrotate.status 파일의 내용을 참조하여 rotate를 한다.
해당 파일을 살펴보니 내용이 없다.
#비정상(문제서버)
[root@localhost log]# cat /var/lib/logrotate.status
logrotate state -- version 2
#정상(비교대상 서버)
[root@localhost log]# cat /var/lib/logrotate.status
logrotate state -- version 2
"/var/log/yum.log" 2016-1-1
"/var/log/cups/error_log" 2016-10-9
"/var/named/data/named.run" 2016-11-20
"/var/log/sssd/*.log" 2015-1-6
"/var/log/dracut.log" 2016-1-1
"/var/log/wtmp" 2015-1-6
"/var/log/spooler" 2016-11-20
"/var/log/btmp" 2016-11-1
"/var/log/xferlog" 2016-11-20
"/var/log/maillog" 2016-11-20
"/var/log/cups/*_log" 2015-1-6
"/var/log/secure" 2016-11-20
"/var/log/messages" 2016-11-20
"/var/account/pacct" 2015-1-6
"/var/log/cron" 2016-11-20
"/var/log/vsftpd.log" 2015-1-7
열심히 검색 했으나, 원인은 찾을 수가 없다.
해결법은 아래 명령어로 rotate를 강제 적용 하는 것이다.
/usr/sbin/logrotate -f /etc/logrotate.conf
위와 같이 하면 /var/lib/logrotate.status 내용이 정상 서버와 같이 만들어지고,
아래와 같이 로테이트 된다. 기존 파일을 분할하는 건 아니다.
-rw------- 1 root root 148 2016-11-25 09:58 messages
-rw-------. 1 root root 1915641841 2016-11-25 09:58 messages-20161125
2016년 11월 16일 수요일
PPS cfgmaker
cfgmaker로 만들고 그걸 다시 수정하는 게 번거로웠다.
cfgmaker는 perl 로 작성되어 있어서 수정이 가능하다.
그래서 target 관련 부분만 수정해서 ppscfgmaker를 만들었다.
diff로 비교해 보면 알지만 한개 라인만 수정하였다.
[root@localhost bin]# diff cfgmaker ppscfgmaker
730c730
< my $default_target_directive = "Target[$target_name]: $if_ref:$router_connect";
---
> my $default_target_directive = "Target[$target_name]: ifInUcastPkts.$if_ref&ifOutUcastPkts.$if_ref:$router_connect + ifInNUcastPkts.$if_ref&ifOutNUcastPkts.$if_ref:$router_connect";
ppscfgmaker
확장자가 없으면 업로드가 안되서 .txt를 추가했다.
.txt 부분만 지우고 사용하면 된다.
2016년 11월 9일 수요일
MRTG PPS(packet per second) 설정
그 중에서 PPS 를 그려보자.
MRTG 사이트를 보면 MIB 리스트가 있는데, 거기에 보면 여러가지 OID 값이 있다.
그 중 패킷 관련 아래의 4가지만 적용한다.
#유니캐스트
ifInUcastPkts
ifOutUcastPkts
#NON 유니캐스트
ifInNUcastPkts
ifOutNUcastPkts
MRTG 적용 방법은 아래 처럼 하면 된다.
기존 cfgmaker 로 생성한 Target 정보를 아래처럼 변경하면 된다.
BPS 적용(cfgmaker 로 생성된 내용.)
Target[SWITCH_pps]: 86:public@111.111.222.222:::::2
PPS 적용
Target[SWITCH_pps]: ifInUcastPkts.86&ifOutUcastPkts.86:public@111.111.222.222:::::2+ ifInNUcastPkts.86&ifOutNUcastPkts.86:public@111.111.222.222:::::2
다른 블로그 글을 보니 ifInUcastPkt 와 ifOutUcastPkts 만 적용하는 하는 글도 보았는데,
여기서는 NON 유니캐스트도 포함시킨 것에 주의 하자.
2016년 10월 22일 토요일
selinux disabled
해당 파일에서 SELINUX=disabled 로 변경 시키고 재부팅을 해도 selinux가 disable 되지 않는다.
확인 해 봤더니, 원래 위치는 /etc/selinux/config이고 /etc/sysconfig/selinux 파일은 링크만 걸려 있는 거다.
어떻게 된 일인지 특정 서버만 링크가 아닌 일반 파일이 /etc/sysconfig/selinux 생성되어 있다.
/etc/selinux/config 에서 설정 변경하니 정상적으로 disabled 된다.
2016년 9월 28일 수요일
2016년 7월 13일 수요일
determining if ip address is already in use for device eth0 centos
위와 같은 오류가 발생.
아무리 찾아 봐도 원인을 알 수 없다.
ARPCHECK=no 옵션을 주면 에러가 안 난다고 하는데, 왠지 찝찝하다.
해당 옵션이 무엇인지에 대한 설명은 /usr/share/doc/initscripts-9.03.40/sysconfig.txt 에 나와 있다.
ARPCHECKn=yes|no
If set to 'no', ifup will not try to determine, if requested ip address
is used by other machine in network.
Defaults to 'yes'.
네트워크에 있는 다른 머신에 의해 결정한다는 건데, 이름에서 추측하건데 arp 체크를 통해 서 중복되는 ip를 찾는 것 같다.
근데!!! 중복되는 IP 가 없어~!!!!
arping 을 해 보라는 둥.. tcpdump 를 잡아 보라는 둥.. 전부 해봐도 특별한 이유가 없다..
xenserver로 설치 한 거라서 조금 특별한 원인이 있지 않을 까도 싶다.
결국 그냥 사용하는 걸로..;;
참조:https://blog.cles.jp/item/6718
160928 추가.
ip 셋팅이 되어 있는 부분을 command로 다시 설정하면서 꼬이는 것 같다.
ifconfig eth0 down
service network restart
오류가 나는 인터페이스를 다운 시킨 후 네트워크를 재시작하면 없어진다.
원격에서 작업시 매우 주의!!
2016년 6월 24일 금요일
centos7 netstat
listening sockets 보기.
# ss -l
모든 소켓 보기.
# ss - a
TCP 소켓 보기.
# ss - t
UDP 소켓 보기.
# ss - u
소켓 사용하는 프로세스 보기.
# ss - p
소켓 사용하는 메모리 보기.
# ss - m
참조
No default or ui configuration directive found
No default or ui configuration directive found
파일 잘못 받아서 생기는 문제.
iso 파일을 로컬에 받지 않고, 네트워크 드라이브로 연결된 폴더에 넣었더니, 문제가 발생한 것 같음.
다른 파일로 다시 받았더니, 파일 크기 자체가 다름.
2016년 4월 8일 금요일
Device eth0 does not seem to be present, delaying initialization 에러
하드디스크만 교체하여 올리니 바로 올라갔다.
네트워크가 안된다.
Device eth0 does not seem to be present, delaying initialization 에러 발생.
여기 참조해서 처리.
networking interface rules이란게 있는 것도 처음 알았다.
방법은 간단했다.
# rm /etc/udev/rules.d/70-persistent-net.rules
# reboot
이렇게 하면 해당 파일을 os가 다시 만든다.
그리고
/etc/sysconfig/network-scripts/ifcfg-eth0
파일에서
새로 생성된 rules 파일에 있는 HWADDR 로 바꾸고,
UUID 부분은 삭제한다.
그리고 service network restart.
네트워크가 올라간다.
2015년 11월 11일 수요일
rsync 로 디렉토리 싱크시 /(슬러시) 주의.
#같은 동작 rsync -arvze "ssh -p 22" --delete /test 192.168.0.2:/test rsync -arvze "ssh -p 22" --delete /test 192.168.0.2:/test/ #같은 동작 rsync -arvze "ssh -p 22" --delete /test/ 192.168.0.2:/test rsync -arvze "ssh -p 22" --delete /test/ 192.168.0.2:/test/
결론. 원본 소스 부분만 /(슬러시) 표시만 주의 하면 됨. dest의 /(슬러시)는 영향을 주지 않음.
160930
man rysync 페이지에 해당 내용이 있었음.ㅡㅡ;
정리하면
- dest 는 슬래시 상관없음.(man 에도 안나오나, 테스트 결과가 그럼)
- src에 슬래시가 붙으면 src 디렉토리 미포함, 안 붙으면 포함
- dest 디렉토리가 없으면 1depth까지 생성.
디렉토리를 심볼릭 링크 걸 걸때 주의사항
ln -s /usr/local/apache2/ /usr/local/apache/
ln: target `/usr/local/apache/' is not a directory: 그런 파일이나 디렉터리가 없습니다
잘못된 명령어.
ln -s /usr/local/apache2/ /usr/local/apache
ln -s /usr/local/apache2/ /usr/local/apache/
ln -s /usr/local/apache2 /usr/local/apache
처음에는 제대로 생성 되나, 다시 한번 실행하면 /usr/local/apache2/ 디렉토리 밑에 한개 더 생성된다.
결론. 전부 안됨. 그냥 주의 할 수 밖에 없음.
2015년 7월 17일 금요일
hpacucli 설치법
1. '제품별로 찾기'에 서버 모델명 넣자. (예: DL160 G8)
2. 검색 결과에서 내 서버 선택. DL160 Gen8 선택 -> HP ProLiant DL160 Gen8 서버 선택
3. 운영체제를 CentOs 설치하면 없다. RedHat으로 선택 하자.
4. 소프트웨어 - 시스템관리 카테고리에 보면 hpacucli-9.40-12.0.x86_64.rpm 있다.
다운로드 후 서버에 업로드
5. rpm -Uvh hpacucli-9.40-12.0.x86_64.rpm
---------------------------------------------
DOWNGRADE NOTE: To downgrade this application to any version prior to 9.10.x.x, the current RPM must be manually uninstalled using the "rpm -e" command before any prior versions can be installed.
LOCKING NOTE: The locking mechanism starting with versions 9.10.X.X, are not compatible with prior versions of the applications. Therefore, mixing older and newer versions of the various applications (ACU, HPACUCLI, HPACUSCRIPTING) is not recommended.
---------------------------------------------
요런 메시지 나오는 데, 그냥 무시.
6. #hpacucli 명령어가 나온다면 정상적으로 설치.
사용법은 각자 알아서.
아니면 여기.
2015년 5월 27일 수요일
sftp 상위 디렉토리 차단
openssh 버젼이 4.8 이상이면 됨. (웬만하면 다 될 듯..)
아래처럼 바꾸고, 추가 해줌.
vim /etc/ssh/sshd_config
# override default of no subsystems
#바꿈
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# ForceCommand cvs server
# 추가
Match group sftpusers
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
#sftp 전용 그룹 추가.
groupadd sftpusers
#dev라는 유저를 추가 (이것만 계속 반복으로 유저 추가)
useradd -g sftpusers -d /home/dev -s /sbin/nologin dev
chown root:root /home/dev
chmod 755 /home/dev
passwd dev
#sshd 재시작
service sshd restart
/home 디렉토리는 기존에 사용하고 있던 디렉토리이고,
user 그룹이 sftpusers 가 아닌 id들은 위의 로직을 타지 않음.
참고 :
https://wiki.archlinux.org/index.php/SFTP_chroot
http://www.programkr.com/blog/MQTM5ADMwYTx.html
2015년 1월 9일 금요일
AP 연동 설치 .(apache 2.4.10 + php 4.4.9 )
php 4.4.9 소스 설치
apache 2.4.10
mysql client 5.1.73
OS : Centos 6.6 32bit
1. php 버젼을 업그레이드 할 수가 없는 상황에서 OS와 httpd만 업그레이드 함.
2. 호환성은 무시하고 간다.
3. CentOS 7.0 버젼으로 하고 싶었으나, 32bit 모듈 문제로 32bit 지원하는 6 버젼 제일 최신으로 감.
4. mysql 은 설치하지 않음. 다른 서버에 설치 되어 있음. client 만 설치.
하다 보니 문제점이 속속 터짐.
문제점 1
#make 시 openssl 에러
#make: *** [ext/openssl/openssl.lo] Error 1
해결
참고 : http://blog.renoeve.com/?p=1204
문제점 2.
libphp4.so: undefined symbol: ap_get_server_version
ap_get_server_version 해당 함수는 없어졌음.
ap_get_server_banner 으로 바꾸면 됨.
참조 1.
http://www.yongbok.net/blog/apache2-undefined-symbol-unixd_config/
참조2.
http://d.hatena.ne.jp/rougeref/20121115
문제점 3.
mysql 사용시 아래처럼 에러 남.
File ’NONEXISTENT/charsets/?.conf’ not found (Errcode: 2)
Character set ’#19’ is not a compiled character set and is not specified in the ’NONEXISTENT/charsets/Index’ file
File ’NONEXISTENT/charsets/?.conf’ not found (Errcode: 2)
Character set ’#19’ is not a compiled character set and is not specified in the ’NONEXISTENT/charsets/Index’ file
File ’NONEXISTENT/charsets/?.conf’ not found (Errcode: 2)
Character set ’#19’ is not a compiled character set and is not specified in the ’NONEXISTENT/charsets/Index’ file
File ’NONEXISTENT/charsets/?.conf’ not found (Errcode: 2)
Character set ’#19’ is not a compiled character set and is not specified in the ’NONEXISTENT/charsets/Index’ file
File ’NONEXISTENT/charsets/?.conf’ not found (Errcode: 2)
php 기본 내장 client API 는 latin 밖에 지원하지 않는 다고 함.
클라이언트 용만 설치 후
yum -y install mysql mysql-devel
php 설치시 configure 옵션을 변경 후 재설치.
’–with-mysql=/usr’ \
문제점 4.
Zend Optimizer 3.3.9 인식 안됨.
인식 안되는 문제는 Thread Safety enable로 설치되어서 임.
근데 왜 Thread Safety enable이냐면
아파치의 apxs를 이용하여 아파치의 mpm 모드를 체크하여, prefork 일 경우만 NTS 모드로 설치를 하는데,
apxs 명령어에 오류가 있다.
php의 configure 파일에서 APXS_MPM=$APXS -q MPM_NAME 부분을 APXS_MPM=httpd -V|awk ’/^Server MPM/{print $3}’ 로 변경.