crond服务介绍
crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
Linux下的任务调度分为两类,系统任务调度和用户任务调度。
1. 系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。
在/etc/crontab文件,这个就是系统任务调度的配置文件。

2. 用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。
用户可以使用crontab 工具来定制自己的计划任务。
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command
各个字段的含义:
# minute:表示分钟,可以是从0到59之间的任何整数。
# hour:表示小时,可以是从0到23之间的任何整数。
# day:表示日期,可以是从1到31之间的任何整数。
# month:表示月份,可以是从1到12之间的任何整数。
# week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
# command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
# 在以上各个字段中,还可以使用以下特殊字符:
# 星号():代表所有可能的值,例如day字段如果是星号,则表示在满足其它字段的制约条件后每天都执行该命令操作。
# 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
# 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“3-6”表示“3,4,5,6”
# 正斜线(/):可以用正斜线指定时间的间隔频率,例如在hour字段中“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如/10,如果用在minute字段,表示每十分钟执行一次。
如何使用crondtab
*我在ftp上执行*[root@ftp vsftpd]# rpm -qa | grep crontabscrontabs-1.11-6.20121102git.el7.noarch[root@ftp vsftpd]# systemctl start crond[root@ftp vsftpd]# systemctl status crond● crond.service - Command SchedulerLoaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)Active: active (running) since 四 2021-12-16 17:21:51 CST; 1h 56min agoMain PID: 4835 (crond)CGroup: /system.slice/crond.service└─4835 /usr/sbin/crond -n12月 16 17:21:51 ftp systemd[1]: Started Command Scheduler.12月 16 17:21:51 ftp systemd[1]: Starting Command Scheduler...12月 16 17:21:51 ftp crond[4835]: (CRON) INFO (RANDOM_DELAY will be scaled with....)12月 16 17:21:51 ftp crond[4835]: (CRON) INFO (running with inotify support)12月 16 17:21:51 ftp crond[4835]: (CRON) INFO (@reboot jobs will be run at comp....)Hint: Some lines were ellipsized, use -l to show in full.//进入编辑界面//写入文件[root@ftp vsftpd]#crontab -e*/5 * * * * echo "11" >> /opt/test #每隔5分钟往test文件里面写入一行“11”//查看列出crontab文件:[root@ftp vsftpd]# crontab -l*/5 * * * * echo "11" >> /opt/test//删除[root@ftp vsftpd]# crontab -r//在列出就没有了[root@ftp vsftpd]# crontab -lno crontab for root//删除提示[root@ftp vsftpd]# crontab -ricrontab: really delete root's crontab? y
书写crontab 定时任务时,需要注意以下几个事项:
(1) 6 个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间。
(2)crontab 定时任务的最小有效时间是分钟,最大有效时间是月。像 2018 年某时执行、3 点 30 分 30 秒这样的时间都不能被识别。
(3) 在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员混淆。
(4)在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。有时使用相对路径的命令会报错。
备份脚本
1.根据案例需求写一个使用shell脚本备份共享资源文件,这个脚本需要满足以下条件:
① 判断备份目录是否存在,不在则创建。
② 每次执行按照日期在备份目录中生成一个日期目录,并判断其是否存在,存在则删除上上周的目录;
③ 运用rsync将共享资源增量备份到日期目录中,并且输出结果。
rsync服务:
rsync是可以实现增量备份的工具。配合任务计划,rsync能实现定时或间隔同步,配合inotify或sersync,可以实现触发式的实时同步。
rsync的选项说明:
# -v:显示rsync过程中详细信息。可以使用”-vvvv”获取更详细信息。
#-P:显示文件传输的进度信息。(实际上”-P”=”—partial —progress”,其中的”—progress”才是显示进度信息的)。
# -n —dry-run :仅测试传输,而不实际传输。常和”-vvvv”配合使用来查看rsync是如何工作的。
# -a —archive :归档模式,表示递归传输并保持文件属性。等同于”-rtopgDl”。
# -r —recursive:递归到目录中去。
# -t —times:保持mtime属性。强烈建议任何时候都加上”-t”,否则目标文件mtime会设置为系统时间,导致下次更新检查出mtime不同从而导致增量传输无效。
# -o —owner:保持owner属性(属主)。
# -g —group:保持group属性(属组)。
# -p —perms:保持perms属性(权限,不包括特殊权限)。
# -D :是”—device —specials”选项的组合,即也拷贝设备文件和特殊文件。
# -l —links:如果文件是软链接文件,则拷贝软链接本身而非软链接所指向的对象。
# -z :传输时进行压缩提高效率。
rsync的选项非常多,能够实现非常具有弹性的功能,以上选项仅仅只是很小一部分常用的选项,但最常用的选项组合是”avz”,即压缩和显示部分信息,并以归档模式传输。
*我在nfs节点上执行*# rsync /etc/fstab /tmp # 在本地同步# rsync -r 192.168.100.12:/etc /tmp # 将远程主机的/etc目录拷贝到本地/tmp下,以保证本地/tmp目录和远程/etc保持同步。# rsync -a /etc /tmp #归档模式//编写脚本[root@ftp vsftpd]# vi /usr/local/sbin/backup.sha=`date '+%Y%m%d'`b=/backup/weekbackupc=/var/log/backup.logpname=$(rpm -qa | grep rsync)#判断rsync是否存在if [ $? -eq 0 ]thenecho "软件包rsync已经安装。"elseecho "软件包rsync没有安装"yum -y install rsync >> /dev/nullif [ $? -eq 0 ];thenecho "安装rsync完成。"elseecho "安装rsync失败。"fifi#判断备份目录是否存在,并增量备份。if [ ! -d "$b" ];thenmkdir -p $becho "$a Backup File missing!" >> /var/log/backup.logrsync -rvz /data/* $b/$aelsersync -rvz /data/* $b/$aif [ -d $b/$a ];thenecho "$a Backup success." >> /var/log/backup.logfind $b -mtime +14 | xargs rm -rfelseecho "$a Backup failed." >> /var/log/backup.logfifi//给脚本权限不然会报错[root@ftp vsftpd]# chmod 755 /usr/local/sbin/backup.sh//添加定时任务:(每7天凌晨1点执行一次脚本)[root@ftp vsftpd]# crontab -e* 1 */7 * * sh /usr/local/sbin/backup.sh
