linux常见shell脚本整理
备份日志
#!/bin/bash
tar -czf log-` date +%Y%m%d` .tar.gz /var/log
00 03 * * 5 /root/logbak.sh
监控内存和磁盘容量,小于给定值时报警
#!/bin/bash
disk_size = $( df / | awk '/\//{print $4}' )
mem_size = $( free | awk '/Mem/{print $4}' )
while :
do
if [ $disk_size -le 512000 -a $mem_size -le 1024000 ]
then mail ‐s "Warning" root << EOF Insufficient resources,资源不足
EOF
fi
done
监控网段中的主机状态
#!/bin/bash myping ( ) {
ping ‐c 2 ‐i 0.3 ‐W 1 $1 &> /dev/null
if [ $? -eq 0 ] ; then echo "$1 is up"
else echo "$1 is down"
fi
}
for i in { 1 .. 254 }
do myping 192.168 .4.$i &
done
根据文件创建用户名密码
#!/bin/bash for i in ` cat user.txt`
do useradd $i echo "123456" | passwd ‐‐stdin $i
done
查看连接本机的Ip
#!/bin/bash
netstat -atn | awk '{print $5}' | awk '{print $1}' | sort -nr | uniq -c
统计时间段内访问量
#!/bin/bash
awk -F "[ /:]" '$7":"$8>="13:30" && $7":"$8<="14:30"' /var/log/httpd/access_log | wc -l
awk -F "[ /:]" '$7":"$8>="13:30" && $7":"$8<="14:30"{print $1}' /var/log/httpd/access_log
Nginx启动脚本
#!/bin/bash program = /usr/local/nginx/sbin/nginx
pid = /usr/local/nginx/logs/nginx.pid
start ( ) {
if [ -f $pid ] ; then echo "nginx 服务已经处于开启状态"
else $program
fi
stop ( ) {
if [ -! -f $pid ] ; then echo "nginx 服务已经关闭"
else $program -s stop echo "关闭服务 ok"
fi
}
status ( ) {
if [ -f $pid ] ; then echo "服务正在运行..."
else echo "服务已经关闭"
fi
} case $1 in
start) start; ;
stop) stop; ;
restart) stop sleep 1 start; ;
status) status; ;
*) echo "你输入的语法格式错误"
esac
自动切割nginx日志文件
logs_path = "/usr/local/nginx/logs/"
mv ${logs_path} access.log ${logs_path} access_$( date -d "yesterday" +"%Y%m%d" ) .log
kill -USR1 ` cat /usr/local/nginx/logs/nginx.pid`
0 1 * * * /data/scripts/nginx_log.sh
检测Mysql数据库连接数量
#!/bin/bash
log_file = /var/log/mysql_count.log
user = root
passwd = 123456
while :
do sleep 2 count = ` mysqladmin -u "$user " -p "$passwd " status | awk '{print $4}' ` echo "` date +%Y‐%m‐%d` 并发连接数为:$count " >> $log_file
done
检测mysql服务是否存活
#!/bin/bash
host = 192.168 .51.198
user = root
passwd = 123456
mysqladmin -h '$host' -u '$user' -p'$passwd' ping &> /dev/null
if [ $? -eq 0 ]
then echo "MySQL is UP"
else echo "MySQL is down"
fi
备份Mysql
#!/bin/bash
user = root
passwd = 123456
dbname = mysql
date = $( date +%Y%m%d)
[ ! -d /mysqlbackup ] && mkdir /mysqlbackup
mysqldump -u "$user " -p "$passwd " "$dbname " > /mysqlbackup/"$dbname " -${date} .sql
根据md5校验码,检测文件是否修改
#!/bin/bash
for i in $( ls /etc/*.conf)
do md5sum "$i " >> /var/log/conf_file.log
done
非交互生成ssh秘钥文件
#!/bin/bash
rm -rf ~/.ssh/{ known_hosts,id_rsa*}
ssh‐keygen -t RSA -N '' -f ~/.ssh/id_rsa
监控http服务器状态
#!/bin/bash
url = http://http://183.232.231.172/index.html
check_http ( )
{ status_code = $( curl -m 5 -s -o /dev/null -w %{ http_code} $url)
} while :
do check_http date = $( date +%Y%m%d‐%H:%M:%S) echo "当前时间为:$date $url 服务器异常,状态码为${status_code} . 请尽快排查异常." > /tmp/http$$ .pid if [ $status_code -ne 200 ] ; then mail -s Warning root < /tmp/http$$ .pid else echo "$url 连接正常" >> /var/log/http.log fi sleep 5
done
删除目录下大小为0的文件
#!/bin/bash
dir = "/var/www/html"
find $dir -type f -size 0 -exec rm -rf { } \ ;
查找linux系统中的僵尸进程
#!/bin/bash
ps aux | awk '{if($8 == "Z"){print $2,$11}}'
生成随机密码
#!/bin/bash
tr -dc '_A‐Za‐z0‐9' < /dev/urandom | head -c 10
生成随机密码(指定字符串)
key = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
num = ${# key}
pass = ''
for i in { 1 .. 8 }
do index = $[ RANDOM %num] pass = $pass ${key: $index: 1}
done
echo $pass
获取本地的一些信息
#!/bin/bash
ip a s | awk 'BEGIN{print " 本 机 MAC 地 址 信 息 如 下 :"}/^[0‐9]/{print $2;getline;if($0~/link\/ether/){print $2}}' | grep -v lo:
ss -nutlp | awk '{print $1,$5}' | awk -F"[: ]" '{print "协议:"$1,"端口号:"$NF}' | grep "[0‐9]" | uniq
修改linux系统最大打开文件数量
#!/bin/bash
cat >> /etc/security/limits.conf << EOF
* soft nofile 65536
* hard nofile 65536
EOF
一次部署memcache
#!/bin/bash
wget http://www.memcached.org/files/memcached-1.5.1.tar.gz
yum -y install gcc
tar -xf memcached‐1.5.1.tar.gz
cd memcached‐1.5.1
./configure
make
make install
打印各种格式的时间
echo "显示星期简称(如:Sun)"
date +%a
echo "显示星期全称(如:Sunday)"
date +%A
echo "显示月份简称(如:Jan)"
date +%b
echo "显示月份全称(如:January)"
date +%B
echo "显示数字月份(如:12)"
date +%m
echo "显示数字日期(如:01 号)"
date +%d
echo "显示数字年(如:01 号)"
date +%Y echo "显示年‐月‐日"
date +%F
echo "显示小时(24 小时制)"
date +%H
echo "显示分钟(00..59)"
date +%M
echo "显示秒"
date +%S
echo "显示纳秒"
date +%N
echo "组合显示"
date +"%Y%m%d %H:%M:%S"
生成签名秘钥和证书
read -p "请输入存放证书的目录:" dir
if [ ! -d $dir ] ; then echo "该目录不存在" exit
fi
read -p "请输入密钥名称:" name
openssl genrsa -out ${dir} /${name} .key
openssl req -new -x509 -key ${dir} /${name} .key -subj "/CN=common" -out ${dir} /${name} .crt
定时启动Python程序
需要保证job.py文件可执行 chmod u+x /root/s1.sh 保证sh文件的执行权限 crontab -e 编辑定时任务 */1 * * * * /root/s1.sh # 设置每分钟执行一次
#!/bin/bash
python3 /root/job.py
echo 'Python脚本执行成功,时间:' >> /root/log
date >> /root/log
开启和关闭jar操作
jar包名称为 uid-consumer-1.1.0-SNAPSHOT.jar
#!/bin/sh
APP_NAME = uid-consumer
SERVER_PORT = 9999
JAR_PATH = '/app/uid-consumer'
JAR_NAME = uid-consumer-1.1.0-SNAPSHOT.jar
JAR_PID = $JAR_NAME \ .pid
LOG_FILE = logs
JAVA_OPTS = "-Xms512m -Xmx512m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:ParallelGCThreads=4 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=utf-8"
is_exist ( ) { pid = ` ps -ef| grep $JAR_NAME| grep -v grep | awk '{print $2}' ` if [ -z "${pid} " ] ; then return 0 else return 1 fi
}
start ( ) { is_existif [ $? -eq "1" ] ; then echo "$APP_NAME is already running pid is ${pid} " else nohup java $JAVA_OPTS -Xloggc:$LOG_FILE /gc/gclog.log -XX:HeapDumpPath = $LOG_FILE /gc/HeapDump.hprof -jar $JAR_PATH /$JAR_NAME > ./$LOG_FILE /run.log 2 >&1 & echo $! > $JAR_PID echo "start $APP_NAME successed pid is $! " tail -1000f $LOG_FILE /run.logfi }
stop ( ) { pidf = $( cat $JAR_PID) echo "pid = $pidf begin kill $pidf " kill $pidf rm -rf $JAR_PID sleep 2 is_existif [ $? -eq "1" ] ; then echo "pid = $pid begin kill -9 $pid " kill -9 $pid sleep 2 echo "$APP_NAME process stopped!" else echo "$APP_NAME is not running!" fi
}
status ( ) { is_existif [ $? -eq "1" ] ; then echo "$APP_NAME is running,pid is ${pid} " else echo "$APP_NAME is not running!" fi
}
restart ( ) { stopstart
}
usage ( ) { echo "Usage: sh run-service.sh [ start | stop | restart | status ]" exit 1
}
case "$1 " in 'start' ) start; ; 'stop' ) stop; ; 'restart' ) restart; ; 'status' ) status; ; *) usage; ;
esac
exit 0