本文共 7002 字,大约阅读时间需要 23 分钟。
本文汇总了 10 个经典的 Linux/Unix 脚本示例,涵盖系统监控、文件同步、用户管理、网站检测等多个场景,简单解释每个脚本的功能和用途。
##脚本 1: 监控 MySQL 主从同步状态
#!/bin/bashHOST=localhostUSER=rootPASSWD=123.comIO_SQL_STATUS=$(mysql -h $HOST -u $USER -p --execute "show slave status\G" 2>/dev/null |awk '/Slave_.*_Running:/{print $1$2}')for i in $IO_SQL_STATUS; do THREAD_STATUS_NAME=${i%:*} THREAD_STATUS=${i#*:} if [ "$THREAD_STATUS" != "Yes" ]; then echo "Error: MySQL Master-Slave $THREAD_STATUS_NAME状态异常!" \ | mail -s "Master-Slave 状态警报" xxx@163.com fidone
功能说明:
##脚本 2: 目录文件变化监控与实时同步
#!/bin/bashMON_DIR=/optwhile read files; do rsync -avz /opt /tmp/opt echo "$(date +'%F %T') 创lovak文件:$files" \ | mail -s "目录监控通知" xxx@163.comdone < <(inotifywait -mqr --format %f -e create $MON_DIR)
功能说明:
##脚本 3: 批量创建用户并设置密码
#!/bin/bashDATE=$@USER_LIST=user.txtfor USER in $USER_LIST; do if ! id $USER &>/dev/null; then PASS=$(echo $RANDOM | md5sum | cut -c 1-8) useradd $USER echo $PASS | passwd --stdin $USER &>/dev/null echo "用户:$USER,密码:$PASS已创建成功。" \ | tee -a $USER_FILE else echo "用户:$USER 已存在!" &> /dev/null fidone
功能说明:
##脚本 4: 批量检测网站异常
#!/bin/bashURL_LIST="www.baidu.com,www.ctnrs.com"FAIL_COUNT=0for URL in $URL_LIST; do HTTP_CODE=$(curl -o /dev/null --connect-timeout 3 -s -w 1 "$URL" 2>/dev/null) if [ $HTTP_CODE -eq 200 ]; then echo "URL:$URL 正常访问!" break else echo "URL:$URL 正在重试(错误次数:$FAIL_COUNT)" FAIL_COUNT+=1 if [ $FAIL_COUNT -eq 3 ]; then echo "警告:URL 吗 lxml cccess failure!" fi donefi
功能说明:
##脚本 5: 批量主机远程执行命令
#!/bin/bashCOMMAND=$*HOST_INFO=host.infofor IP in $(awk '{print $1}' $HOST_INFO); do USER=$(awk -v ip=$IP '{print $2}' $HOST_INFO) PORT=$(awk -v ip=$IP '{print $3}' $HOST_INFO) PASS=$(awk -v ip=$IP '{print $4}' $HOST_INFO) # 远程登录并执行命令 expect -c " spawn ssh -p $PORT $USER@$IP expect { \"(yes/no)\" { send 'yes\r' ; exp_continue } \"password:\" { send '$PASS\r' ; exp_continue } \"\$USER@\$*\" { send '$COMMAND\r exit\r' ; exp_continue } }" echo "-------------------"done
功能说明:
##脚本 6: 一键部署 LNMP 网站平台
#!/bin/bashNGINX_V=1.15.6PHP_V=5.6.36TMP_DIR=/tmpINSTALL_DIR=/usr/local# 安装 Nginxfunction install_nginx() { yum install -y gcc gcc-c++ make openssl-devel pcre-devel wget wget http://nginx.org/download/nginx-${NGINX_V}.tar.gz tar zxf nginx-${NGINX_V}.tar.gz cd nginx-${NGINX_V} ./configure --prefix=$INSTALL_DIR/nginx --with-http_ssl_module \ --with-http_stub_status_module --with-stream make -j 4 make install mkdir -p $INSTALL_DIR/nginx/conf/vhost cp -rf $PWD/nginx.conf $INSTALL_DIR/nginx/conf/ rm -rf $INSTALL_DIR/nginx/html/* echo "ok" > $INSTALL_DIR/nginx/html/status.html echo '' > $INSTALL_DIR/nginx/html/status.php $INSTALL_DIR/nginx/sbin/nginx}# 安装 PHPfunction install_php() { cd $TMP_DIR yum install -y gcc gcc-c++ gd-devel libxml2-devel \ libcurl-devel libjpeg-devel libpng-devel \ openssl-devel libmcrypt-devel libxslt-devel libtidy-devel wget http://www.php.info/download/Php/${PHP_V}.tar.gz tar zxf php-${PHP_V}.tar.gz cd php-${PHP_V} ./configure --prefix=$INSTALL_DIR/php \ --with-config-file-path=$INSTALL_DIR/php/etc \ --enable-fpm --enable-opcache \ --with-mysql --with-mysqli --with-pdo-mysql \ --with-openssl --with-zlib --with-curl --with-gd \ --with-jpeg-dir --with-png-dir --with-freetype-dir \ --enable-mbstring --enable-hash make -j 4 make install cp php.ini-production $INSTALL_DIR/php/etc/php.ini cp sapi/fpm/php-fpm.conf $INSTALL_DIR/php/etc/php-fpm.conf cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm chmod +x /etc/init.d/php-fpm /etc/init.d/php-fpm start}# EntryPointread -p "请输入编号(1-9):" numbercase $number in1) install_nginx;;2) install_php;;3) install_mysql;;4) install_nginx install_php;;9) exitesac
功能说明:
##脚本 7: 查看服务器资源利用率
#!/bin/bashfunction cpu() { NUM=1 while [ $NUM -le 3 ]; do util=$(vmstat | awk '{if(NR==3)print 100-$15"%"}') iowait=$(vmstat | awk '{if(NR==3)print $16"%"}') echo "CPU - 使用率:$util (%),磁盘IO等待率:$iowait (%)" sleep 1 NUM=[$NUM+1] done}function memory() { total=$(free -m | awk '{if(NR==2)printf "%dG",$2/1024}') used=$(free -m | awk '{if(NR==2)printf "%dG",(($2-2)/1024)}') available=$(free -m | awk '{if(NR==2)printf "%dG",$NF/1024}') echo "内存 - 总大小:$totalG,使用:$usedG,剩余:$availableG"}function disk() { echo "硬盘 - 挂载点: $(df -h | awk '/^/dev/ {print $1}')" echo "总大小:$(df -h | awk '{if(NR==1)print $2}')G" echo "使用:$(df -h | awk '{if(NR==2)print $2}'G" echo "使用率:$(df -h | awk '{if(NR==2)print $5}'%""}function tcp_status() { echo "TCP连接状态:$(ss -antp | awk '{status[$1]++}END{for(i in status) print i":"status[i]""}'}# 执行各个函数的检测cpumemorydisktcp_status
功能说明:
##脚本 8: 找出占用 CPU/内存过高的进程
ps -eo user,pid,pcpu,pmem,args --sort=-pcpu | head -n 10ps -eo user,pid,pcpu,pmem,args --sort=-pmem | head -n 10
功能说明:
##脚本 9: 自动发布 Java 项目(Tomcat)
#!/bin/bashDATE=$(date +%F_%T)TOMCAT_NAME=$1TOMCAT_DIR=/usr/local/$TOMCAT_NAMEROOT=$TOMCAT_DIR/webapps/ROOTBACKUP_DIR=/data/backupWORK_DIR=/tmpPROJECT_NAME=tomcat-java-demo# 克隆或拉取代码cd $WORK_DIRif [ ! -d $PROJECT_NAME ]; then git clone https://github.com/lizhenliang/tomcat-java-demo.git cd $PROJECT_NAMEelse cd $PROJECT_NAME git pullfi# 构建项目mvn clean package -Dmaven.test.skip=trueif [ $? -ne 0 ]; then echo "Maven 构建失败!" exit 1fi# 部署TOMCAT_PID=$(ps -ef | grep "$TOMCAT_NAME" | egrep -v "grep|$$" | awk '{NR==1; print $2}')[[ -n "$TOMCAT_PID" ]] && kill -9 $TOMCAT_PID[[ -d $ROOT ]] && mv $ROOT $BACKUP_DIR/$TOMCAT_NAME_${DATE}unzip $WORK_DIR/$PROJECT_NAME/target/*.war -d $ROOT$TOMCAT_DIR/bin/startup.sh
功能说明:
##脚本 10: 自动发布 PHP 项目
#!/bin/bashDATE=$(date +%F_%T)WWWROOT=/usr/local/nginx/html/$1BACKUP_DIR=/data/backupWORK_DIR=/tmpPROJECT_NAME=php-demo# 克隆或拉取代码cd $WORK_DIRif [ ! -d $PROJECT_NAME ]; then git clone https://github.com/lizhenliang/php-demo.git cd $PROJECT_NAMEelse cd $PROJECT_NAME git pullfi# 部署if [ ! -d $WWWROOT ]; then mkdir -p $WWWROOT rsync -avz --exclude=.git $WORK_DIR/$PROJECT_NAME/* $WWWROOTelse rsync -avz --exclude=.git $WORK_DIR/$PROJECT_NAME/* $WWWROOTfi
功能说明:
转载地址:http://treyk.baihongyu.com/