zoukankan      html  css  js  c++  java
  • add swap

    借的

    #!/bin/bash
    #########################################
    #Function:    add a new swap partition
    #Usage:       bash add_swap.sh
    #Author:      Customer service department
    #Company:     Alibaba Cloud Computing
    #Version:     2.1
    #########################################
    
    check_os_release()
    {
      while true
      do
        if cat /proc/version | grep redhat >/dev/null 2>&1
        then
          os_release=redhat
          echo "$os_release"
          break
        fi
        if cat /proc/version | grep centos >/dev/null 2>&1
        then
          os_release=centos
          echo "$os_release"
          break
        fi
        if cat /proc/version | grep ubuntu >/dev/null 2>&1
        then
          os_release=ubuntu
          echo "$os_release"
          break
        fi
        if cat /proc/version | grep -i debian >/dev/null 2>&1
        then
          os_release=debian
          echo "$os_release"
          break
        fi
        break
        done
    }
    
    check_memory_and_swap()
    {
      mem_count=$(free -m|grep Mem|awk '{print $2}')
      swap_count=$(free -m|grep Swap|awk '{print $2}')
      if [ "$mem_count" -ge 15000 ]  && [ "$mem_count" -le 32768 ]
      then
        if [ "$swap_count" -ge 8000 ]
        then
          echo -e "33[1;40;31mYour swap is already enough.Do not need to add swap.Script will exit.
    33[0m"
          rm -rf $LOCKfile
          exit 1
        elif [ "$swap_count" -ne 0 ]
        then
          echo -e "33[40;32mYour swap is not enough,need to add swap.
    33[40;37m"
          remove_old_swap
          create_swap 8192
        else
          echo -e "33[40;32mYour swap is not enough,need to add swap.
    33[40;37m"
          create_swap 8192
        fi
      elif [ "$mem_count" -ge 3900 ] && [ "$mem_count" -lt 15000 ]
      then
        if [ "$swap_count" -ge 3900 ]
        then
          echo -e "33[1;40;31mYour swap is already enough.Do not need to add swap.Script will exit.
    33[0m"
          rm -rf $LOCKfile
          exit 1
        elif [ "$swap_count" -ne 0 ]
        then
          echo -e "33[40;32mYour swap is not enough,need to add swap.
    33[40;37m"
          remove_old_swap
          create_swap 4096
        else
          echo -e "33[40;32mYour swap is not enough,need to add swap.
    33[40;37m"
          create_swap 4096
        fi
      else
        if [ "$swap_count" -ge 2000 ]
        then
          echo -e "33[1;40;31mYour swap is already enough.Do not need to add swap.Script will exit.
    33[0m"
          rm -rf $LOCKfile
          exit 1
        elif [ "$swap_count" -ne 0 ]
        then
          echo -e "33[40;32mYour swap is not enough,need to add swap.
    33[40;37m"
          remove_old_swap
          create_swap 2048
        else
          echo -e "33[40;32mYour swap is not enough,need to add swap.
    33[40;37m"
          create_swap 2048
        fi
      fi
    }
    
    create_swap()
    {
      root_disk_size=$(df -m|grep -w "/"|awk '{print $4}')
      if [ "$1" -gt "$((root_disk_size-1024))" ]
      then
        echo -e "33[1;40;31mThe root disk partition has no space for $1M swap file.Script will exit.
    33[0m"
        rm -rf $LOCKfile
        exit 1
      fi
      if [ ! -e $swapfile ]
      then
        dd if=/dev/zero of=$swapfile bs=1M count=$1
        /sbin/mkswap $swapfile
        /sbin/swapon $swapfile
        /sbin/swapon -s
        echo -e "33[40;32mStep 3.Add swap partition successful.
    33[40;37m"
      else
        echo -e "33[1;40;31mThe /var/swap_file already exists.Will exit.
    33[0m"
        rm -rf $LOCKfile
        exit 1
      fi
    }
    
    remove_old_swap()
    {
      old_swap_file=$(grep swap $fstab|grep -v "#"|awk '{print $1}')
      swapoff $old_swap_file
      cp -f $fstab ${fstab}_bak
      sed -i '/swap/d' $fstab
    }
    
    config_rhel_fstab()
    {
      if ! grep $swapfile $fstab >/dev/null 2>&1
      then
        echo -e "33[40;32mBegin to modify $fstab.
    33[40;37m"
        echo "$swapfile	 swap	 swap defaults 0 0" >>$fstab
      else
        echo -e "33[1;40;31m/etc/fstab is already configured.
    33[0m"
        rm -rf $LOCKfile
        exit 1
      fi
    }
    
    config_debian_fstab()
    {
      if ! grep $swapfile $fstab >/dev/null 2>&1
      then
        echo -e "33[40;32mBegin to modify $fstab.
    33[40;37m"
        echo "$swapfile	 none	 swap sw 0 0" >>$fstab
      else
        echo -e "33[1;40;31m/etc/fstab is already configured.
    33[0m"
        rm -rf $LOCKfile
        exit 1
      fi
    }
    
    ##########start######################
    #check lock file ,one time only let the script run one time 
    LOCKfile=/tmp/.$(basename $0)
    if [ -f "$LOCKfile" ]
    then
      echo -e "33[1;40;31mThe script is already exist,please next time to run this script.
    33[0m"
      exit
    else
      echo -e "33[40;32mStep 1.No lock file,begin to create lock file and continue.
    33[40;37m"
      touch $LOCKfile
    fi
    
    #check user
    if [ $(id -u) != "0" ]
    then
      echo -e "33[1;40;31mError: You must be root to run this script, please use root to install this script.
    33[0m"
      rm -rf $LOCKfile
      exit 1
    fi
    
    os_release=$(check_os_release)
    if [ "X$os_release" == "X" ]
    then
      echo -e "33[1;40;31mThe OS does not identify,So this script is not executede.
    33[0m"
      rm -rf $LOCKfile
      exit 0
    else
      echo -e "33[40;32mStep 2.Check this OS type.
    33[40;37m"
      echo -e "33[40;32mThis OS is $os_release.
    33[40;37m"
    fi
    
    swapfile=/var/swap_file
    fstab=/etc/fstab
    
    echo -e "33[40;32mStep 3.Check the memory and swap.
    33[40;37m"
    check_memory_and_swap
    
    echo -e "33[40;32mStep 4.Begin to modify $fstab.
    33[40;37m"
    case "$os_release" in
    redhat|centos)
      config_rhel_fstab
      ;;
    ubuntu|debian)
      config_debian_fstab
      ;;
    esac
    
    free -m
    echo -e "33[40;32mAll the operations were completed.
    33[40;37m"
    rm -rf $LOCKfile
    

      

  • 相关阅读:
    (转)[Android实例] 关于使用ContentObserver监听不到删除短信会话的解决方案
    (转)Android 使用com.j256.ormlite
    Android中判断网络连接是否可用及监控网络状态
    2018/11/12-操作系统课笔记
    mysql的ONLY_FULL_GROUP_BY语义 --转自http://www.wtoutiao.com/p/19dh3ec.html
    nginx相关配置说明
    为重负网络优化 Nginx 和 Node.js --引用自https://linux.cn/article-1314-1.html
    windows环境下局域网内无法访问apache站点
    27个知名企业品牌VI视觉识别系统规范手册
    TopShelf&Quartz.Net实现多任务的值守
  • 原文地址:https://www.cnblogs.com/feral/p/6546731.html
Copyright © 2011-2022 走看看