1.序言
今日因一线上对账文件系统所生成的数据文件过多过大,逐日累计已达到几十T,服务器磁盘容量告急,所以需要弄个服务器脚本,将距离当前日期6个月之前的文件,全部备份转移到另一个目录下。
2.执行脚本
2.1编写移动文件脚本
创建脚本文件
touch movefile.sh
脚本具体内容如下:
#!/bin/sh
find /data/source -mtime +180 -type d -name "test*" -exec mv {} /opt/target \;
脚本内容注释:find就是查找,找到/data/source这个目录下,所有当前时间180天之前的(-mtime +180),类型为目录(-type d),名称包含test前缀(-name "test*")的所有目录,移动(mv)到/opt/target 目录下;
※ {}两边一定要留空格,且最后的\是必须要有的,否则会报错!
chmod a+x movesftp.sh #给脚本赋执行权限
2.2设置定时任务
两种方式,一是在/etc/crontab中添加定时任务执行语句:
另一种是在定时任务列表中,直接编辑。使用如下命令:
crontab -l #查看任务列表
crontab -e #编辑任务列表
保存后,使用命令
service crond restart
如此就设置定时任务完成啦。但有一点必须谨慎,就是在执行定时任务列表操作保存时,会有提示告知,保存的定时任务命令必须正确,否则有错误就不能保存成功,且会影响或使之前其他的定时任务命令丢失失效!
还可以检查一下,定时任务是否是开机自启,方式服务器重启后失效!
chkconfig --list crond --查看crond是否开机自动启动
chkconfig --level 35 crond on --设置crond开机自动启动
目前我这边的文件已经在慢慢转移当中,但是几十T的文件,可不是一会就能转移完成的,只能慢慢等待了。。
重大坑点:因为此次的批量目录转移,我是通过日期来指定将180天之前的数据都转移到指定目录。但是有些目录还未使用(例如一个命名为20201201的目录,是预留给以后的数据文件使用的,但是其创建时间却是20190901),但因为创建时间较早,也被转移到了指定目录。发现后,我便再重新转回原地址。可是,悲剧发生了,我忽略了文件的所属用户及用户组,没有设置权限。导致后来线上业务的文件上传失败,完犊子。。。。。
解决办法:转移回原地址后,使用如下命令修改文件所属用户及用户组
chown -R 所属用户.用户组 #修改文件、目录所属用户及用户组
chmod 755 目录名 #给指定目录分配读写执行权限(r: 可读, w: 可写, x: 可执行. r=4,w=2,x=1)