平时很少写Shell脚本,主要是它的语法相比Python要难掌握,但做为非专业运维工程师,拼拼凑凑还是要能写一点Shell代码,在处理文件相关任务时还是要方便些。
一、数据库冷备
#!/bin/sh bakFile="/bak/"$(date "+%Y%m%d")"150001.gz" mysqldump -h *.rds.amazonaws.com -u* -p* --databases * | gzip > $bakFile scp -i /bak/EcommerceChinaDev.pem $bakFile ec2-user@ip:/home/ec2-user/bak/
0 15 * * * sh /bak/bakdb.sh
每天定时(UTC时间0点15)将AWS上的RDS dump到一台离线机器。
二、Java与Vue项目打包发布
cur_branch=2022_01_25_V8.4
echo $cur_branch
echo '开始打包发布........'
cd /mnt/integrate/source_posadm
rm -rf /mnt/integrate/source_posadm/blinds_pos_admin/
git clone http://user:passwd@ip:8083/tech/blinds_pos_admin.git
echo '源代码下载完成...'
cd /mnt/integrate/source_posadm/blinds_pos_admin/
git checkout $cur_branch
git branch
cnpm install
echo 'node依赖模块下载完成'
cnpm run test
echo 'build完成'
cp -rf /mnt/integrate/source_posadm/blinds_pos_admin/test/. /usr/local/posadm
ps -ef | grep nginx | awk '{print $2}' | xargs kill -9
/usr/sbin/nginx
注:
1、考虑到项目相对较少,不想去搭建Jenkins这类集成打包环境,就直接写一个Shell脚本。
2、在脚本中写 rm -rf * 要特别小心,一般要指定删除目录的完整路径,不要先cd到目录,然后执行rm -rf ,这样风险很大,极有可能误删,记得四年前第一次写的时候没注意,一个脚本执行后把脚本自己都干掉了。
这里建议生产环境机器,最好重新定义一下rm,不要直接删除,把数据先挪到回收站,在~/.bashrc中加入如下代码。
alias rm=trash
trash()
{
mv $@ ~/.Trash/
}
alias rl='ls ~/.Trash'
alias ur=undelfile
undelfile()
{
mv -i ~/.Trash/$@ ./
}
cleartrash()
{
read -p "Clear trash>[n]" confirm
[ $confirm == 'y' ] || [ $confirm == 'Y' ] && /usr/bin/rm -rf ~/.Trash/*
}



