프로젝트 상 몇 십대의 RHEL 서버의 커널 관련 파라미터 수정할 일이 있어서 간단한 스크립트로 일괄 적용 되도록 하였다.

 

파라미터 내용이다.

Cap 2015-10-28 18-00-24-017

 

WAS 서버는 웹서버와 동일하다.

 

Cap 2015-10-28 18-00-58-264

 

스크립트는 # ./para.sh web 형식으로 사용하면된다.

# ./para.sh 명령만 실행하면 사용 가능한 인자 값을 알려준다.

어떻게 동작하는 지는 실행해 보면 알 수 있다.

스크립트 파일 : para

para.sh 스크립트 내용

#!/bin/bash

SYSCTL="/etc/sysctl.conf"
LIMITS="/etc/security/limits.conf"
NPROC="/etc/security/limits.d/90-nproc.conf"

CurrTime=`date +%Y-%m-%d"_"%T`
alias cp=cp && cp -f $SYSCTL "$SYSCTL"_"$CurrTime"
alias cp=cp && cp -f $LIMITS "$LIMITS"_"$CurrTime"
alias cp=cp && cp -f $NPROC "$NPROC"_"$CurrTime"

echo "Copied $SYSCTL to "$SYSCTL"_"$CurrTime""
echo "Copied $LIMITS to "$LIMITS"_"$CurrTime""
echo "Copied $NPROC to "$NPROC"_"$CurrTime""

CleanSysctl () {
cat $SYSCTL | grep '^## For WEB Server' >& /dev/null
if [ $? == 0 ]; then
    sed -i '/^##\ For\ WEB\ Server/,/^##\ End\ of\ WEB\ Server/d' $SYSCTL
fi
cat $SYSCTL | grep '^## For WAS Server' >& /dev/null
if [ $? == 0 ]; then
    sed -i '/^##\ For\ WAS\ Server/,/^##\ End\ of\ WAS\ Server/d' $SYSCTL
fi
cat $SYSCTL | grep '^## For MYSQL Server' >& /dev/null
if [ $? == 0 ]; then
    sed -i '/^##\ For\ MYSQL\ Server/,/^##\ End\ of\ MYSQL\ Server/d' $SYSCTL
fi
}

CleanLmiits () {
cat $LIMITS | grep '^## For WEB Server' >& /dev/null
if [ $? == 0 ]; then
    sed -i '/^##\ For\ WEB\ Server/,/^##\ End\ of\ WEB\ Server/d' $LIMITS
fi
cat $LIMITS | grep '^## For WAS Server' >& /dev/null
if [ $? == 0 ]; then
    sed -i '/^##\ For\ WAS\ Server/,/^##\ End\ of\ WAS\ Server/d' $LIMITS
fi
cat $LIMITS | grep '^## For MYSQL Server' >& /dev/null
if [ $? == 0 ]; then
    sed -i '/^##\ For\ MYSQL\ Server/,/^##\ End\ of\ MYSQL\ Server/d' $LIMITS
fi
}

CleanNproc () {
cat $NPROC | grep '^## For WEB Server' >& /dev/null
if [ $? == 0 ]; then
    sed -i '/^##\ For\ WEB\ Server/,/^##\ End\ of\ WEB\ Server/d' $NPROC
fi
cat $NPROC | grep '^## For WAS Server' >& /dev/null
if [ $? == 0 ]; then
    sed -i '/^##\ For\ WAS\ Server/,/^##\ End\ of\ WAS\ Server/d' $NPROC
fi
cat $NPROC | grep '^## For MYSQL Server' >& /dev/null
if [ $? == 0 ]; then
    sed -i '/^##\ For\ MYSQL\ Server/,/^##\ End\ of\ MYSQL\ Server/d' $NPROC
fi
}

WebServer () {
#WEB SYSCTL.CONF
CleanSysctl;

#cat $SYSCTL | grep ^kernel.shmall >& /dev/null
#if [ $? == 0 ]; then
#    sed -i 's/^kernel.shmall/\#kernel.shmall/g' $SYSCTL
#fi

cat $SYSCTL | grep ^kernel.sysrq >& /dev/null
if [ $? == 0 ]; then
    sed -i 's/^kernel.sysrq/\#kernel.sysrq/g' $SYSCTL
fi

cat >> $SYSCTL << EOF

## For WEB Server Parameter ##
kernel.sysrq = 1
kernel.panic_on_unrecovered_nmi = 1
kernel.unknown_nmi_panic = 1
vm.swappiness = 10
kernel.softlockup_thresh = 60
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_fin_timeout = 10
net.core.wmem_max = 12582912
net.core.rmem_max = 12582912
net.ipv4.tcp_rmem = 10240 87380 12582912
net.ipv4.tcp_wmem = 10240 87380 12582912
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 1440000
net.core.somaxconn = 16384
net.ipv4.tcp_mem = 8388608 12582912 16777216
net.ipv4.udp_mem = 8388608 12582912 16777216
## End of WEB Server Parameter ##
EOF

#WEB LIMITS.CONF
CleanLmiits;

cat >> $LIMITS << EOF
## For WEB Server Parameter ##
*           hard           nofile      65535
*           soft           nofile      65535
## End of WEB Server Parameter ##
EOF

#WEB 90-NPROC.CONF
CleanNproc;

sed -i '/nproc/d' /etc/security/limits.d/90-nproc.conf
cat >> $NPROC << EOF
## For WEB Server Parameter ##
#*          soft    nproc     1024
#root       soft    nproc     unlimited
## End of WEB Server Parameter ##
EOF
}

MysqlServer () {
#MYSQL SYSCTL.CONF
CleanSysctl;

#cat $SYSCTL | grep ^kernel.shmall >& /dev/null
#if [ $? == 0 ]; then
#    sed -i 's/^kernel.shmall/\#kernel.shmall/g' $SYSCTL
#fi

cat $SYSCTL | grep ^kernel.sysrq >& /dev/null
if [ $? == 0 ]; then
    sed -i 's/^kernel.sysrq/\#kernel.sysrq/g' $SYSCTL
fi

cat >> $SYSCTL << EOF

## For MYSQL Server Parameter ##
kernel.sysrq = 1
kernel.panic_on_unrecovered_nmi = 1
kernel.unknown_nmi_panic = 1
net.core.wmem_max = 12582912
net.core.rmem_max = 12582912
net.ipv4.tcp_rmem = 10240 87380 12582912
net.ipv4.tcp_wmem = 10240 87380 12582912
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 1440000
net.core.somaxconn = 16384
net.ipv4.tcp_mem = 8388608 12582912 16777216
net.ipv4.udp_mem = 8388608 12582912 16777216
## End of MYSQL Server Parameter ##
EOF

#MYSQL LIMITS.CONF
CleanLmiits;

cat >> $LIMITS << EOF
## For MYSQL Server Parameter ##
*           hard           nofile      10240
*           soft           nofile      10240
## End of MYSQL Server Parameter ##
EOF

#MYSQL 90-NPROC.CONF
CleanNproc;

sed -i '/nproc/d' /etc/security/limits.d/90-nproc.conf
cat >> $NPROC << EOF
## For MYSQL Server Parameter ##
#*          soft    nproc     1024
#root       soft    nproc     unlimited
## End of MYSQL Server Parameter ##
EOF
}

ARGS=1
E_BADARGS=65

if [ $# -ne $ARGS ]; then
  echo "Method: `basename $0` {web | was | mysql}"
  exit $E_BADARGS
fi

TargetConf=$1
function action
{
    WebServer
}

if [ "$1" == "web" ]; then
    action
    echo ""
    echo "Successed Config of WEB Server Parameters."
    exit
fi

function action2
{
    WebServer
}

if [ "$1" == "was" ]; then
    action2
    sed -i 's/WEB\ Server\ Parameter/WAS\ Server\ Parameter/g' $SYSCTL
    sed -i 's/WEB\ Server\ Parameter/WAS\ Server\ Parameter/g' $LIMITS
    sed -i 's/WEB\ Server\ Parameter/WAS\ Server\ Parameter/g' $NPROC
    echo ""
    echo "Successed Config of WAS Server Parameters."
    exit
fi

function action3
{
    MysqlServer
}

if [ "$1" == "mysql" ]; then
    action3
    echo "Successed Config of MYSQL Server Parameters."
    exit
fi

 

 

커널파라미터 자동 적용 스크립트.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다