Liunx数据备份与定时执行
一、编写脚本
1 创建脚本
touch test-bak.sh
2 写入命令
#! /bin/bash
#创建一个临时文件夹
mkdir /root/beifen
#将需要备份的文件复制到临时文件夹下
cp -r /root/backup /root/beifen
#将beifen文件夹打包
tar -zcPvf /root/backup$(date +%Y%m%d).tar.gz /root/beifen
#删除临时文件夹下的文件
rm -rf /root/beifen/
#删除文件夹下超过30天的文件
find ./ -mtime +30 -name "*.tar.gz" -exec rm -rf {} \;
二、设置定时执行脚本
1 修改crontab内容
输入命令:crontab –e
#每7天执行一次test-bak.sh脚本
0 0 */7 * * /root/test-bak.sh
2 重启crond服务
输入命令:service crond restart
三、crond和crontab详解
1 crond是什么?
定时任务软件种类
at 适合仅执行一次就结束的调度命令,需要启动一个后端的atd服务。
crontab 需要启动一个服务crond才行,crond服务通过crontab命令实现
anacron 无法周期性执行,只能以天为周期,但有个特点,在关机状态下未>执行的任务,下次开机时可以补上执行
注:crontab为最常用的定时任务。运行linux后,开机自启动crond任务,系统会每分钟检查是否有要执行的任务工作(循环检测)默认系统中可以登陆的用户,都可以使用crontab定义计划任务。不过,可以通过/etc/cron.allow文件限制权限。
2 crontab支持两种状态
-
直接编写计划任务;
-
使用目录的方式,放在目录里面的都会定时执行,定时目录可在/etc/crontab中设定。
Linux下的任务调度分为两类,系统任务调度和用户任务调度。
-
系统任务调度:在**/etc/crontab文件中配置。系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理**等。
vi /etc/crontab
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root# For details see man 4 crontabs# Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon ... # | | | | | # * * * * * user-name command to be executed
-
用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。
使用者权限文件
#该文件中所列用户不允许使用crontab命令 /etc/cron.deny#该文件中所列用户允许使用crontab命令 /etc/cron.allow#所有用户crontab文件存放的目录,以用户名命名 /var/spool/cron/
crontab文件
#minute: 表示分钟,可以是从0到59之间的任何整数。 #hour:表示小时,可以是从0到23之间的任何整数。 #day:表示日期,可以是从1到31之间的任何整数。 #month:表示月份,可以是从1到12之间的任何整数。 #week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。 #command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。 minute hour day month week command#在以上各个字段中,还可以使用以下特殊字符: #星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。#逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”#中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”#正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
服务操作说明
#启动服务 /sbin/service crond start #关闭服务 /sbin/service crond stop #重启服务 /sbin/service crond restart #重新载入配置 /sbin/service crond reload#查看crontab服务状态 service crond status #手动启动crontab服务 service crond start #查看crontab服务是否已设置为开机启动 ntsysv #加入开机自动启动 chkconfig –level 35 crond on
-
3 crontab命令详解(*)
命令参数
-u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般y由root用户来运行。file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。 -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。 -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。 -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。 -i:在删除用户的crontab文件时给确认提示。
常用方法
-
创建一个新的crontab文件,在/etc/profile中添加
$ vi /etc/profile#crontab EDITOR=vi; export EDITOR
创建一个cron文件,如rootcron
$ vi rootcron# (put your own initials here)echo the date to the console every# 15minutes between 6pm and 6am0,15,30,45 06-18 * * * echo 'date' > /root/console#保存并退出。确信前面5个域用空格分隔。$ crontab rootcron #创建文件的一个副本已经被放在/var/spool/cron目录中,文件名就是用户名(即root)
-
列出crontab文件
#列出crontab文件 $ crontab -l#备份crontab文件 $ crontab -l > /root/mycron
-
编辑crontab文件
#编辑crontab文件 $ crontab -e
-
删除crontab文件
#删除crontab文件 $ crontab -r
-
查看日志
#查看cron运行日志 $ cd /var/log/cron.log $ tail -f /var/log/cron.log