IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux 定时将一个文件夹里文件移动到另一指定目录 -> 正文阅读

[系统运维]Linux 定时将一个文件夹里文件移动到另一指定目录


我们业务在生产服务器运行,产生许多日志文件,磁盘空间有限,需要经常 手动清理,现在通过linux的crond服务实现,自动移动日志到指定目录。

一、通过脚本移动文件

1.使用vi命令创建一个脚本文件(我是在home目录下创建的):

创建脚本文件
touch mvfile.sh
编辑脚本文件
vi mvfile.sh

#! /bin/sh
find /home/opt/services/logs/ -name "*.log*" -exec mv {} /home/testbackup \;

这段命令的意思是,找到 /home/opt/services/logs/ 目录下 名字 是*.log* 的文件 移动到 /home/testbackup 目录下。

#! /bin/sh
find /home/opt/services/logs/ -mtime +3 -name "*.log*" -exec mv {} /home/testbackup \;

这段命令的意思是,找到 /home/opt/services/logs/ 目录下 名字 是*.log* 的文件 移动到 /home/testbackup 目录下,加 -mtime +3 这种方式设置当前时间前4天的文件,如下

#!/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 目录下;

需要注意的是最后的目录名字 和 \ 之间一定要有一个空格 。否则会出现 find: 遗漏”-exec”的参数 这个错误。

2.保存退出,给脚本赋执行权限然后可以通过sh来执行脚本

chmod a+x movesftp.sh  
sh /home/mvlog.sh

3.检查服务器是否有crond服务

命令:service crond status
正常返回:crond (pid 30084) 正在运行…

如果没有正常返回:需要安装一下,命令如下
yum -y install vixie-cron
yum -y install crontabs

启动命令:
service crond start
停止命令:
service crond stop
重启命令:
service crond restart

4.设置定时任务

在定时任务列表中,直接编辑。使用如下命令:
命令:crontab -l #查看任务列表
命令:crontab -e #编辑任务列表

*/2 * * * * /bin/sh /home/mvlog.sh 

这里设置的是每2分钟执行一次。

* * * * * 命令。。。。
每个*对应的取值范围分别是:
0-59 分钟,0-23小时,1-31日,1-12月,0-7星期几。

更详细解释详情:Linux crond定时任务时间说明

5.wq保存退出,然后重启服务

命令:service crond restart。

注意:如果操作过过程中有提示权限的问题,记得时候root 权限,给文件开放权限。

如此就设置定时任务完成啦。但有一点必须谨慎,就是在执行定时任务列表操作保存时,会有提示告知,保存的定时任务命令必须正确,否则有错误就不能保存成功,且会影响或使之前其他的定时任务命令丢失失效!

还可以检查一下,定时任务是否是开机自启,方式服务器重启后失效!

chkconfig  --list crond               --查看crond是否开机自动启动
chkconfig  --level 35 crond on        --设置crond开机自动启动

二、crontab 实现每秒执行

linux crontab 命令,最小的执行时间是一分钟。如需要在小于一分钟内重复执行,可以有两个方法实现。

1.使用延时来实现每N秒执行

创建脚本文件:touch mvfile.sh
编辑脚本文件:vi mvfile.sh

#! /bin/sh
find /home/opt/services/logs/ -name "*.log*" -exec mv {} /home/testbackup \;

crontab -e 输入以下语句,然后 :wq 保存退出。

* * * * * php /home/fdipzone/php/crontab/tolog.php
* * * * * sleep 10; sh /home/mvfile.sh
* * * * * sleep 20; sh /home/mvfile.sh
* * * * * sleep 30; sh /home/mvfile.sh
* * * * * sleep 40; sh /home/mvfile.sh
* * * * * sleep 50; sh /home/mvfile.sh

原理:通过延时方法 sleep N 来实现每N秒执行。

注意:60必须能整除间隔的秒数(没有余数),例如间隔的秒数是2,4,6,10,12等。
如果间隔的秒数太少,例如2秒执行一次,这样就需要在crontab 加入60/2=30条语句。不建议使用此方法,可以使用下面介绍的第二种方法。

2.编写shell脚本实现

创建脚本文件:touch crontab.sh
编辑脚本文件:vi crontab.sh
给脚本赋权:chmod r+x crontab.sh

#!/bin/bash
step=2 #间隔的秒数,不能大于60
for (( i = 0; i < 60; i=(i+step) )); do
    $(sh '/home/mvfile.sh')
    sleep $step
done
exit 0

crontab -e 输入以下语句,然后:wq 保存退出。

# m h  dom mon dow   command
* * * * * sh /home/crontab.sh

原理:在sh使用for语句实现循环指定秒数执行。

注意:如果60不能整除间隔的秒数,则需要调整执行的时间。例如需要每7秒执行一次,就需要找到7与60的最小公倍数,7与60的最小公倍数是420(即7分钟)。
则 crontab.sh step的值为7,循环结束条件i<420, crontab -e可以输入以下语句来实现

# m h  dom mon dow   command
*/7 * * * * /home/crontab.sh
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 23:07:00  更:2022-04-07 23:11:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 22:37:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码