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

  1. *我在ftp上执行*
  2. [root@ftp vsftpd]# rpm -qa | grep crontabs
  3. crontabs-1.11-6.20121102git.el7.noarch
  4. [root@ftp vsftpd]# systemctl start crond
  5. [root@ftp vsftpd]# systemctl status crond
  6. crond.service - Command Scheduler
  7. Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
  8. Active: active (running) since 2021-12-16 17:21:51 CST; 1h 56min ago
  9. Main PID: 4835 (crond)
  10. CGroup: /system.slice/crond.service
  11. └─4835 /usr/sbin/crond -n
  12. 12 16 17:21:51 ftp systemd[1]: Started Command Scheduler.
  13. 12 16 17:21:51 ftp systemd[1]: Starting Command Scheduler...
  14. 12 16 17:21:51 ftp crond[4835]: (CRON) INFO (RANDOM_DELAY will be scaled with....)
  15. 12 16 17:21:51 ftp crond[4835]: (CRON) INFO (running with inotify support)
  16. 12 16 17:21:51 ftp crond[4835]: (CRON) INFO (@reboot jobs will be run at comp....)
  17. Hint: Some lines were ellipsized, use -l to show in full.
  18. //进入编辑界面
  19. //写入文件
  20. [root@ftp vsftpd]#crontab -e
  21. */5 * * * * echo "11" >> /opt/test #每隔5分钟往test文件里面写入一行“11”
  22. //查看列出crontab文件:
  23. [root@ftp vsftpd]# crontab -l
  24. */5 * * * * echo "11" >> /opt/test
  25. //删除
  26. [root@ftp vsftpd]# crontab -r
  27. //在列出就没有了
  28. [root@ftp vsftpd]# crontab -l
  29. no crontab for root
  30. //删除提示
  31. [root@ftp vsftpd]# crontab -ri
  32. crontab: 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”,即压缩和显示部分信息,并以归档模式传输。

  1. *我在nfs节点上执行*
  2. # rsync /etc/fstab /tmp # 在本地同步
  3. # rsync -r 192.168.100.12:/etc /tmp # 将远程主机的/etc目录拷贝到本地/tmp下,以保证本地/tmp目录和远程/etc保持同步。
  4. # rsync -a /etc /tmp #归档模式
  5. //编写脚本
  6. [root@ftp vsftpd]# vi /usr/local/sbin/backup.sh
  7. a=`date '+%Y%m%d'`
  8. b=/backup/weekbackup
  9. c=/var/log/backup.log
  10. pname=$(rpm -qa | grep rsync)
  11. #判断rsync是否存在
  12. if [ $? -eq 0 ]
  13. then
  14. echo "软件包rsync已经安装。"
  15. else
  16. echo "软件包rsync没有安装"
  17. yum -y install rsync >> /dev/null
  18. if [ $? -eq 0 ];then
  19. echo "安装rsync完成。"
  20. else
  21. echo "安装rsync失败。"
  22. fi
  23. fi
  24. #判断备份目录是否存在,并增量备份。
  25. if [ ! -d "$b" ];then
  26. mkdir -p $b
  27. echo "$a Backup File missing!" >> /var/log/backup.log
  28. rsync -rvz /data/* $b/$a
  29. else
  30. rsync -rvz /data/* $b/$a
  31. if [ -d $b/$a ];then
  32. echo "$a Backup success." >> /var/log/backup.log
  33. find $b -mtime +14 | xargs rm -rf
  34. else
  35. echo "$a Backup failed." >> /var/log/backup.log
  36. fi
  37. fi
  38. //给脚本权限不然会报错
  39. [root@ftp vsftpd]# chmod 755 /usr/local/sbin/backup.sh
  40. //添加定时任务:(每7天凌晨1点执行一次脚本)
  41. [root@ftp vsftpd]# crontab -e
  42. * 1 */7 * * sh /usr/local/sbin/backup.sh