Shell是一种命令解释器,linux版本都默认安装的通用程序脚本,值得使用它来做一些定时批量任务,但它还是有一定的局限性,
1、代码行大于100行就得考虑用其他的程序语言,比如python,因为shell调试比较困难;
2、如果是性能调优的话,就得考虑用其他的程序语言,因为shell更多执行命令行。
入门的书藉,我是看这本书:《高级Bash脚本编程指南(Advanced Bash-Scripting Guide)》 - 书栈网 · BookStack
下面介绍下几个应用场景:
1、tomcat的log文件定期清理:
#!/bin/bash
#tomcat的日志清理
logs_path="/usr/local/apache-tomcat-9.0.68/logs"
# 当前时间24*30小时前(30天前)
find $logs_path -mtime +5 -name "localhost.*.log" -exec rm -rf {} \;
find $logs_path -mtime +5 -name "localhost_access_log.*.txt" -exec rm -rf {} \;
find $logs_path -mtime +5 -name "catalina.*.log" -exec rm -rf {} \;
find $logs_path -mtime +5 -name "manager.*.log" -exec rm -rf {} \;
find $logs_path -mtime +5 -name "host-manager.*.log" -exec rm -rf {} \;
find $logs_path -mtime +5 -name "fileservice.log.*" -exec rm -rf {} \;
find $logs_path -mtime +1 -name "catalina.*.log" -exec rm -rf {} \;
>$logs_path/catalina.out;
2、数据库的每天备份:
#!/bin/bash
#decription:mysql-order automatically backup script
#文件名为database_db+日期,这里声明数据库名的变量
backupDatabase=database
fileName=${backupDatabase}`date +%Y%m%d`
#定义baseDir变量
baseDir=/backup/
#使用mysqldump备份数据库
mysqldump --defaults-extra-file=/etc/mysql/mariadb.conf.d/50-client.cnf ${backupDatabase} >${baseDir}${fileName}.sql
#压缩
tar -zcPvf ${baseDir}${fileName}.sql.tar.gz ${baseDir}${fileName}.sql
#删除刚备份的sql文件,留下压缩的
rm -f ${baseDir}${fileName}.sql;
#删除7天前备份的数据,只保留一周的数据
find ${baseDir} -mtime +3 -name "${backupDatabase}*.tar.gz" -exec rm -rf {} \;
#删除7天前的日志数据,只保留一周的日志数据 已在mysql设置失效时间,只保存30内的日志
#find /var/lib/mysql/ -mtime +7 -name "mariadb-relay-bin.*" -exec rm -rf {} \;
3、nginx的log定时清理
#!/bin/bash
#nginx的日志清理
logs_path="/var/log/nginx/"
find $logs_path -name access.log.* -exec rm -rf {} \;
find $logs_path -name error.log.* -exec rm -rf {} \;
4、数据库定时推送excel文件
#!/bin/bash
sql_path=/usr/local/bin/demo.sql
db=database
csv_path=/backup/data.csv
mysql -uroot -p123456 ${db} < ${sql_path} |sed -e "s/\t/,/g" -e "s/NULL/ /g" -e "s/\n/\r\n/g" ${csv_path} >