Linux脚本:虚拟机上,定时任务批量移动指定文件到另一目录

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中添加定时任务执行语句:

Linux脚本:虚拟机上,定时任务批量移动指定文件到另一目录_第1张图片

另一种是在定时任务列表中,直接编辑。使用如下命令:

crontab -l      #查看任务列表

crontab -e     #编辑任务列表

Linux脚本:虚拟机上,定时任务批量移动指定文件到另一目录_第2张图片

保存后,使用命令

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)

你可能感兴趣的:(虚拟机专栏,linux,文件转移脚本,虚拟机,sh,虚拟机定时任务cron)