linux ubuntu crontab 定时执行 shell 脚本 数据备份 遇到的坑

要求编写备份服务,每隔2个小时,将 /home/user/local/data 文件夹的数据拷贝到 /home/user/backup 下面,并且将备份时间和文件名称列表写入到 /home/user/list 文件。

以上的‘user’ 就是系统对应的用户名,本文用的是‘levant’

一、创建相对应的文件夹

先 sudo su 一下
在这里插入图片描述
在、/local/data 下新建几个文件,比如我建的是这几个
在这里插入图片描述
建立backup文件夹用来备份
在这里插入图片描述
建立list记录备份时间和文件名称

在这里插入图片描述

二、开始写shell脚本

在这里插入图片描述

注意:要使用绝对路径

# 复制文件data文件夹下所有文件到backup文件夹
cp -r /home/levant/local/data/* /home/levant/backup

# 记录备份的时间
#这里需要注意两个点:
#1、date和>>左边的符号不是单引号 是反角符号
#2、date 和右边的单引号要有空格
echo `date '+%Y-%m-%d %H:%M:%S'`>>/home/levant/list

#获取文件名称函数
function get_dir(){
        for ele in `ls $1`
        do
                file=$1"/"$ele
                # -d if $file is directory then the condition is ture
                if [ -d $file ]
                then
                        get_dir $file
                else
                        echo $file>>$output_file
                fi
        done
}

input_dir="/home/levant/local/data"
output_file="/home/levant/list"
get_dir $input_dir

三、使用crontab进行定时备份操作

1、安装(我用的是ubuntu,centOS的会有不同,请百度)

安装:apt-get install cron
启动:service cron start
重启:service cron restart
停止:service cron stop
检查状态:service cron status
查询cron可用的命令:service cron
检查Cronta工具是否安装:crontab -l

2、启动crontab后开始编写

crontab -e

选择 vim 编译器

在这里插入图片描述

* * * * * /home/levant/local/backup.sh >> /home/levant/local/a.log 2>&1 & 

前面五个星号是时间的设置,为了方便调试,我这里设置的是每分钟备份一次,其他时间请自己百度一下
注意,一定要使用绝对路径。
另外,>>后边的 /home/levant/local/a.log 是存日志的文件,执行后crontab会自动建立,2>&1 & 是指正确的错误的都打印在日志上。

四、查看结果

你可以使用 service cron restart去重启一下crontab,这样就可以马上运行,不然可能要等两三分钟才能运行。
回到 /levant 目录下,cat 一下list
在这里插入图片描述
这里已经显示是每分钟备份一次了
去backup文件夹下看看有没有文件
在这里插入图片描述
文件已备份成功

五、总结

问题一般出现在shell脚本的编写和编写crontab的作业上,前者请仔细阅读我在脚本里的注释,最重要的就是涉及目录的要使用绝对路径。


版权声明:本文为weixin_45728842原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。