
05. 定时任务概念(第一个服务) 作用: 1) 类似生活中闹钟 Alarmy 叫醒方式 01 关闭方式: 做算数题 2位数 乘法运算 02 关闭方式: 运动关闭 摇手机 5次 03 关闭方式: 拍照关闭 找个地方拍照 2) 可以自动完成操作命令 夜里备份数据(访问量不大) 白天(访问量也少-游戏) cp /data /backup 自动清理磁盘 自动的进行时间同步更新 ntpdate xxx 软件种类: cronie 实现定时任务功能***** atd 实现定时任务功能 只能一次设置定时功能 anacron 实现定时任务功能 应用在家用电脑 7*24服务器 检查软件是否安装 cronie [root@oldboyedu ~]# rpm -qa cronie cronie-1.4.11-19.el7.x86_64 [root@oldboyedu ~]# rpm -ql cronie /etc/cron.deny /bin/crontab rpm -ivh 软件包.rpm --- 手动安装软件 -i install 安装 -v 显示过程信息 -h human 以人类可读方式显示信息 说明: 无法解决软件依赖关系 补充说明: 如何让linux和windows主机之间传输数据 yum install -y lrzsz 在linux上进行操作 rz -y 从windows上下载重要数据信息 sz -y 数据信息 从linux上上传重要数据到windows 定时任务实现方法: 日志文件需要定期进行切割处理 周一 secure 100M 周二(00:00) mv secure secure-`date +%F` 100M 切割后的文件 touch secure 系统特殊目录: 系统定时任务周期:每小时 控制定时任务目录:/etc/cron.hourly 系统定时任务周期:每一天 控制定时任务目录:/etc/cron.daily 00:00-23:59 系统定时任务周期:每一周 控制定时任务目录:/etc/cron.weekly 7天 系统定时任务周期:每个月 控制定时任务目录:/etc/cron.monthly 30 28 31 用户定时任务 每天的02:30进行数据备份??? a 用户定时任务查看 crontab -l(list) 说明: 列表查看定时任务信息(cron table) b 用户定时任务编辑 crontab -e(edit) 说明: 编辑配置定时任务信息 crontab -e 编写定时任务 vi /var/spool/cron/ 定时任务配置文件保存目录 /var/spool/cron/root root用户设置的定时任务配置文件 /var/spool/cron/oldboy oldboy用户设置的定时任务配置文件 visudo 对普通用户提权 vi /etc/sudoers 06. 定时任务实际编写方法 a 定时任务服务环境准备 定时任务服务是否启动/是否开机自动启动 [root@oldboyedu ~]# systemctl status crond ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2019-04-23 09:15:43 CST; 2 days ago Main PID: 905 (crond) CGroup: /system.slice/crond.service └─905 /usr/sbin/crond -n Apr 23 09:15:43 oldboyedu.com systemd[1]: Started Command Scheduler. Apr 23 09:15:43 oldboyedu.com systemd[1]: Starting Command Scheduler... Apr 23 09:15:43 oldboyedu.com crond[905]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 30% if used.) Apr 23 09:15:43 oldboyedu.com crond[905]: (CRON) INFO (running with inotify support) b 实际编写定时任务 配置方法: crontab -e 编写语法规范: # 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,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed * * * * * 具体做什么事情 分 时 日 月 周 写法: 01. 用数值表示时间信息 00 02 * * * 备份文件 02. 利用特殊符号表示时间信息 * * * * * 备份文件 每分钟 每小时 每天 每月 每周 PS: 定时任务最短执行的周期为每分钟 */5 */5 */5 每隔5分钟 每隔5小时 01-05 02 * * * 01到05 02 * * * 指定时间的范围 00 14,20 * * * 指定不连续的时间信息 测验01: 每天下午02:30分钟 起来学习 30 14 * * * 测验02: 每隔3天 夜里2点 执行数据备份 00 02 */3 * * 测验03: */10 01,03 * * * ??? 01点 每隔10分钟 03点 每隔10分钟 每天 凌晨1点和凌晨3点 每隔10分钟0点整 --> 01:00 03:00 测验04: */10 01-03 * * * 测验05: * 01,03 * * * ??? 测验06: * 01-03 * * * 测验07: 00 02 28 */2 6 ??? 02:00 28 每隔两个月 星期6 结论: 01. 在写时间信息的时候, 如果想表示每隔多久执行什么任务 /上面尽量用*号表示, 不要写具体数值 02. 时间信息由左到右依次书写, 尽量不要跳步 03. 当编写定时任务时,日期信息不要和星期信息同时出现 补充说明: 20/10 01,03 * * * 01:20 01:30 01:40 01:59 03:00 03:59 c 实际编写定时任务 1) 每天凌晨两点备份 /data目录到 /backup 第一个历程: 写上时间信息 00 02 * * * 第二个历程: 写上完成任务的具体命令 cp -a /data /backup 第三个历程: 编写定时任务 crontab -e 00 02 * * * cp -a /data /backup 定时任务排查方法: 01. 检查是否有定时任务配置文件 cat /var/spool/cron/root 00 02 * * * cp -a /data /backup 02. 检查定时任务日志文件 ll /var/log/cron -rw-------. 1 root root 14050 Apr 25 15:49 /var/log/cron 日志信息说明 Apr 25 15:53:22 oldboyedu crontab[3893]: (root) BEGIN EDIT (root) Apr 25 15:54:06 oldboyedu crontab[3934]: (oldboy) BEGIN EDIT (oldboy) Apr 25 15:54:48 oldboyedu crontab[3893]: (root) REPLACE (root) Apr 25 15:54:48 oldboyedu crontab[3893]: (root) END EDIT (root) Apr 25 15:55:01 oldboyedu crond[905]: (root) RELOAD (/var/spool/cron/root) Apr 25 15:55:01 oldboyedu CROND[3939]: (root) CMD (cp -a /data /backup) Apr 25 15:55:01 oldboyedu CROND[3937]: (root) MAIL (mailed 55 bytes of output but got status 0x004b#012) 执行时间 主机名 编辑定时任务 以什么用户编辑或执行定时任务/干了什么事情 执行定时任务 07. 定时任务编写注意事项:(规范) 1) 编写定时任务要有注释说明 2) 编写定时任务路径信息尽量使用绝对路径 3) 编写定时任务命令需要采用绝对路径执行 /usr/sbin/useradd 命令执行成功条件: useradd ---> $PATH ---> /sbin/useradd ---> 命令执行成功 定时任务执行时,识别的PATH信息只有: /usr/bin:/bin useradd命令--->usr/sbin/useradd 4) 编写定时任务时,可以将输出到屏幕上的信息保存到黑洞中,避免占用磁盘空间 * * * * * sh test.sh &>/dev/null 说明: 定时任务中执行命令,如果产生输出到屏幕的信息,都会以邮件方式告知用户 /var/spool/mail/root 不断变大占用磁盘空间 占用的block空间 解决方法: 将邮件服务关闭 systemctl stop postfix /var/spool/postfix/maildrop/ 不断产生小文件占用磁盘空间 占用的inode空间 解决方法: 删除小文件 rm -f /var/spool/postfix/maildrop/* systemctl start postfix 5) 编写定时任务, 尽量不要产生屏幕输出信息 cp -a /data /backup tar zcvf /backup/data.tar.gz /data 有信息输出 cd / tar zcf /backup/data.tar.gz ./data 没有信息输出 6) 当需要多个命令完成一个定时任务需求时,可以利用脚本编写定时 vim backup.sh cp -a /data /backup tar zcvf /backup/data.tar.gz /data crontab -e # xxxxx * * * * * /bin/sh /server/scripts/backup.sh &>/dev/null