1. 程式人生 > >Linux 系統初始化指令碼;

Linux 系統初始化指令碼;

1.背景日常伺服器申請完畢後需要各種系統指標初始化,實施思路(編寫系統初始化指令碼,ansible 批量拷貝到目標機器執行);

初始化指令碼如下;
#!/bin/bash
function install_pkg(){
yum -y install lrzsz zip nuzip net-tools g++ gcc gcc-c++ epel-release lsof make cmake telnet ntp wget git tree nload nmap iftop sysstat iotop bind-utils fuse fuse-libs
}

function init_disk(){
       if [ -b /dev/sdb ]       
       then 
           mkfs.xfs /dev/vdb  
           mount /dev/vdb /devops
           chmod 777 /devops -R
           echo "/dev/sdb    /devops    xfs     defaults      0  0  "  >> /etc/fstab       
      fi
}


function add_swap(){
dd if=/dev/zero of=/c/.swap bs=1G count=8
mkswap /devops/.swap
swapon /devops/.swap
echo "/devops/.swap  swap  swap    defaults    0 0"   >>  /etc/fstab
}

function update_time(){
echo '*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1' >/var/spool/cron/root
}


function kernel_optimization(){
sysctl_file= "/etc/sysctl.conf"
touch $sysctl_file
if [ -f $ sysctl_file ];then
cat >> $sysctl_file <<EOF
fs.nr_open =3000000
fs.file-max =3000000
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 655360
kernel.msgmax = 655360
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
vm.max_map_count = 262144
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_time = 30
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 1048576
net.ipv4.tcp_max_tw_buckets = 50000
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_reordering = 5
net.ipv4.tcp_retrans_collapse = 0
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_rmem = 4096        87380   4194304
net.ipv4.tcp_sack = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_wmem = 4096        16384   4194304
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
EOF
else
 echo "sysctl.conf 檔案不存在 " >> /var/log/init.log
fi
}

function f_limit(){
cp /etc/security/limits.conf /etc/security/limits.conf.bak
cat > /etc/security/limits.conf <<EOF
*        soft    nproc   3000000
*        soft    nproc   3000000
*        hard    nproc   3000000
*        soft    nofile   3000000
*        hard    nofile  3000000
*        soft    memlock unlimited
*        hard    memlock unlimited
EOF
}

function add_keys(){
curl http://ops.chehejia.com:9090/scripts/add_jenkins.sh | sh
curl http://ops.chehejia.com:9090/scripts/add_ops.sh | sh
curl http://ops.chehejia.com:9090/scripts/add_work.sh | sh
}





function project_dir(){
mkdir -p {/devops/data/log/,/devops/app/,/devops/build,/devops/app/download,/devops/app/module,/devops/data/cache/,/devops/backup/build,/chj/certs/}
chown work:work /devops/  -R
chown work:work /devops/data/ -R 
}



function add_monitor_agent(){
rpm -vih http://download.pkg.chj.cloud/telegraf-1.7.2-1.x86_64.rpm
rm -rf  /etc/telegraf/*
cd /etc/telegraf/ 
wget http://ops.chehejia.com:9090/file/telegraf.zip 
unzip telegraf.zip
fp="/etc/telegraf/"
ip=$(ifconfig |grep -w inet |grep '255.255.255'|grep -v 0.0.0.0|awk '{print $2}')
sed -i "/global_tags/ a\  ip= \"$ip\"" /etc/telegraf/telegraf.conf
systemctl start telegraf.service
systemctl enable telegraf.service
}

function java_config(){
wget -o /var/log/wget.log -P /usr/local   http://change-dev.download.pkg.chj.cloud/jdk1.8.0_121.tar.gz
cd /usr/local
tar xf jdk1.8.0_121.tar.gz
ln -s /usr/local/jdk1.8.0_121 jdk 
cat > /etc/profile.d/java.sh <<EOF
JAVA_HOME=/usr/local/jdk
CLASSPATH=./:$JAVA_HOME/lib:JAVA_HOME/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME
EOF
}


if [ "$1" == "sys.init" ]
then    
     FirstRun_file="/tmp/FirstRun"
     if [ ${FirstRun_file}  ] 
      
     then
         install_pkg  
         init_disk      
         project_dir
         update_time
         kernel_optimization
         f_limit
         add_keys
         add_monitor_agent
         java_config 
         rm -rf {$FirstRun_file}  
    else
        echo "system no init"
    fi 
    
else
    echo "No parameters "

fi


2.ansible 腳步內容如下;

#!/bin/bash
if [ ! -n $1 ]
then
    ipaddress=$1
    ansible -i ${ipaddress},all -m copyt -a "src=/home/ops/ops_base_env_deploy/ops_init.env/init.sh dest=/tmp/init.sh owner=ops group=ops" 
    ansible -i ${ipaddress},all -m shell -a "touch /tmp/FirstRun && sh /tmp/init.sh "
    echo "系統環境初始化完成"
    sed -i '6s/^/#/' ansible.sh  
else
    echo "請輸入初始化機器IP地址"
fi