文章目录
- 1. 定时任务说明
- 2. 定时任务软件
- —2.1 cronie
- —2.2 atd
- —2.3 anacron
- —2.4 检查软件是否安装
- 3. 定时任务配置
- —3.1 系统已经存在的定时任务
- —3.2 自定义设置定时任务
- ——3.2.1 查看定时任务
- ——3.2.2 配置定时任务方式
- ——3.2.3 设置定时任务时间
- —3.3 确认定时任务服务是否正在运行
- —3.4 需求01:每分钟执行定时任务备份文件
- —3.5 需求02:每隔10分钟将几个目录打包
- —3.6 需求03:每分钟创建一个用户
- —3.7 需求05:不想看到定时任务异常提示信息
- —3.8 定时任务编写的注意事项
- —3.9 查看定时任务是否执行
- 4. 定时任务的注意事项
- 5. 编辑定时任务规范
- —5.1 在定时任务中执行命令
- —5.2 在定时任务中执行脚本
- 6. 测验练习
1. 定时任务说明
01. 类似生活中使用的闹钟
02. 可以自动完成操作命令
03. 定时备份系统数据信息
网站每天会产生用户访问大量的数据,网站一定要保存好, 每天进行备份(本地 远程备份)
服务器访问用户量比较少的时候做备份合适
原则: 重复性的工作都可以让系统来自动完成
cp 本地备份 避免数据被误删除,避免误修改
scp 远程备份 避免服务器宕机数据丢失的问题
希望服务器自动完成
2. 定时任务软件
—2.1 cronie
默认系统自带定时服务 crond(crontab),系统中主要使用的定时任务软件
[root@linux ~]# rpm -qa cronie
cronie-1.4.11-19.el7.x86_64
—2.2 atd
定时任务只执行一次,一次性定时服务
—2.3 anacron
非7*24小时运行的服务器
—2.4 检查软件是否安装
rpm --查看安装软件数据包信息
rpm -qa 软件名 --查看是否指定的软件已经安装
rpm -ql 软件名 --查看软件大礼包中都有什么数据信息
rpm -qf 文件绝对路径信息 --查看一个命令文件属于哪个软件大礼包
rpm -qc 软件名 --查看服务的配置文件信息
rpm -ivh 软件包名 --利用rpm安装软件大礼包
rpm -e
rpm -e cronie --nodeps 禁止yum remove卸载软件
3. 定时任务配置
—3.1 系统已经存在的定时任务
系统会自动运行里面的内容(系统中毒的时候)
1)系统定时任务周期:每小时/etc/cron.hourly/
[root@oldboy-xiaodao.com.cn ~]# ll /etc/cron.hourly/test.sh
-rwxr-xr-x 1 root root 53 Jan 26 15:48 /etc/cron.hourly/test.sh
[root@oldboy-xiaodao.com.cn ~]# cat /etc/cron.hourly/test.sh
#!/bin/bash
echo oldboy.info >>/tmp/oldboy_hour.txt
2)系统定时任务周期:每一天 /etc/cron.daily
total 12
-rwx------. 1 root root 219 Apr 11 2018 logrotate
-rwxr-xr-x. 1 root root 618 Mar 18 2014 man-db.cron
-rwx------ 1 root root 208 Apr 11 2018 mlocate
经典应用:
[root@linux ~]# ll /etc/cron.daily/
total 12
-rwx------. 1 root root 219 Apr 11 2018 logrotate --- 自动切割日志
3)系统定时任务周期:每个月/etc/cron.monthly
total 0
4)系统定时任务周期:每一周 /etc/cron.weekly:
total 0
[root@linux ~]# ll /etc/cron
cron.d/ cron.daily/ cron.deny(定时任务黑名单) cron.hourly/ cron.monthly/ crontab(配置说明文件) cron.weekly/
说明: 系统默认定时任务没有1小时以下间隔时间
/etc/cron.deny --- 定时任务黑名单, 阻止哪些用户不能设置定时任务
[root@linux ~]# echo oldboy >>/etc/cron.deny
[root@linux ~]# cat /etc/cron.deny
oldboy
—3.2 自定义设置定时任务
——3.2.1 查看定时任务
1)利用一个命令进行查看
[root@linux ~]# crontab -l 查看root用户编辑的定时任务信息
2)利用一个文件进行查看
[root@linux ~]# cat /var/spool/cron/root 查看root用户编辑的定时任务信息
3)伪装身份查看普通用户定时任务
[root@linux ~]# crontab -u oldgirl -l
——3.2.2 配置定时任务方式
1)root用户配置定时任务
[root@linux ~]# crontab -e
或
[root@linux ~]# vim /var/spool/cron/root
2)普通用户配置定时任务
[oldboy002@linux ~]$ crontab -e
或
[oldboy002@linux ~]$ vim /var/spool/cron/oldboy
——3.2.3 设置定时任务时间
1)每分钟都执行定时任务
*(每分钟) *(每小时) *(每天) *(每月) *(每周)
2)*/n 每隔多久
*/10(每隔10分钟) */10(每隔10小时) */10 */10 */10
3)设置具体时间
0 0 * * * ---00:00执行
30 14 * * * ---14:30执行
30 14 */5 * * ---每隔5天的14:30执行
4)从什么时间到什么时间(连续的范围)
0 9-11 * * * - ---每天的9点到11点
5)从什么时间到什么时间(不连续范围)
0 00,22-23 * * * ---每天的0点,22点,23点
10,20 22-23 * * * ---每天的0点,22点,23点的10分和20分执行
常见编写错误:
在编写定时任务的时候, 一定不能把日期和周信息进行同时编辑
如:* * 15 * 5
测验: 编辑定时任务 实现/etc/hosts文件进行备份 /tmp/hosts_bak
—2.1 cronie
默认系统自带定时服务 crond(crontab),系统中主要使用的定时任务软件 [root@linux ~]# rpm -qa cronie cronie-1.4.11-19.el7.x86_64
—2.2 atd
定时任务只执行一次,一次性定时服务
—2.3 anacron
非7*24小时运行的服务器
—2.4 检查软件是否安装
rpm --查看安装软件数据包信息 rpm -qa 软件名 --查看是否指定的软件已经安装 rpm -ql 软件名 --查看软件大礼包中都有什么数据信息 rpm -qf 文件绝对路径信息 --查看一个命令文件属于哪个软件大礼包 rpm -qc 软件名 --查看服务的配置文件信息 rpm -ivh 软件包名 --利用rpm安装软件大礼包 rpm -e rpm -e cronie --nodeps 禁止yum remove卸载软件
3. 定时任务配置
—3.1 系统已经存在的定时任务
系统会自动运行里面的内容(系统中毒的时候)
1)系统定时任务周期:每小时/etc/cron.hourly/
[root@oldboy-xiaodao.com.cn ~]# ll /etc/cron.hourly/test.sh
-rwxr-xr-x 1 root root 53 Jan 26 15:48 /etc/cron.hourly/test.sh
[root@oldboy-xiaodao.com.cn ~]# cat /etc/cron.hourly/test.sh
#!/bin/bash
echo oldboy.info >>/tmp/oldboy_hour.txt
2)系统定时任务周期:每一天 /etc/cron.daily
total 12
-rwx------. 1 root root 219 Apr 11 2018 logrotate
-rwxr-xr-x. 1 root root 618 Mar 18 2014 man-db.cron
-rwx------ 1 root root 208 Apr 11 2018 mlocate
经典应用:
[root@linux ~]# ll /etc/cron.daily/
total 12
-rwx------. 1 root root 219 Apr 11 2018 logrotate --- 自动切割日志
3)系统定时任务周期:每个月/etc/cron.monthly
total 0
4)系统定时任务周期:每一周 /etc/cron.weekly:
total 0
[root@linux ~]# ll /etc/cron
cron.d/ cron.daily/ cron.deny(定时任务黑名单) cron.hourly/ cron.monthly/ crontab(配置说明文件) cron.weekly/
说明: 系统默认定时任务没有1小时以下间隔时间
/etc/cron.deny --- 定时任务黑名单, 阻止哪些用户不能设置定时任务
[root@linux ~]# echo oldboy >>/etc/cron.deny
[root@linux ~]# cat /etc/cron.deny
oldboy
—3.2 自定义设置定时任务
——3.2.1 查看定时任务
1)利用一个命令进行查看
[root@linux ~]# crontab -l 查看root用户编辑的定时任务信息
2)利用一个文件进行查看
[root@linux ~]# cat /var/spool/cron/root 查看root用户编辑的定时任务信息
3)伪装身份查看普通用户定时任务
[root@linux ~]# crontab -u oldgirl -l
——3.2.2 配置定时任务方式
1)root用户配置定时任务
[root@linux ~]# crontab -e
或
[root@linux ~]# vim /var/spool/cron/root
2)普通用户配置定时任务
[oldboy002@linux ~]$ crontab -e
或
[oldboy002@linux ~]$ vim /var/spool/cron/oldboy
——3.2.3 设置定时任务时间
1)每分钟都执行定时任务
*(每分钟) *(每小时) *(每天) *(每月) *(每周)
2)*/n 每隔多久
*/10(每隔10分钟) */10(每隔10小时) */10 */10 */10
3)设置具体时间
0 0 * * * ---00:00执行
30 14 * * * ---14:30执行
30 14 */5 * * ---每隔5天的14:30执行
4)从什么时间到什么时间(连续的范围)
0 9-11 * * * - ---每天的9点到11点
5)从什么时间到什么时间(不连续范围)
0 00,22-23 * * * ---每天的0点,22点,23点
10,20 22-23 * * * ---每天的0点,22点,23点的10分和20分执行
常见编写错误:
在编写定时任务的时候, 一定不能把日期和周信息进行同时编辑
如:* * 15 * 5
测验: 编辑定时任务 实现/etc/hosts文件进行备份 /tmp/hosts_bak
1)利用一个命令进行查看 [root@linux ~]# crontab -l 查看root用户编辑的定时任务信息 2)利用一个文件进行查看 [root@linux ~]# cat /var/spool/cron/root 查看root用户编辑的定时任务信息 3)伪装身份查看普通用户定时任务 [root@linux ~]# crontab -u oldgirl -l
——3.2.2 配置定时任务方式
1)root用户配置定时任务
[root@linux ~]# crontab -e
或
[root@linux ~]# vim /var/spool/cron/root
2)普通用户配置定时任务
[oldboy002@linux ~]$ crontab -e
或
[oldboy002@linux ~]$ vim /var/spool/cron/oldboy
——3.2.3 设置定时任务时间
1)每分钟都执行定时任务
*(每分钟) *(每小时) *(每天) *(每月) *(每周)
2)*/n 每隔多久
*/10(每隔10分钟) */10(每隔10小时) */10 */10 */10
3)设置具体时间
0 0 * * * ---00:00执行
30 14 * * * ---14:30执行
30 14 */5 * * ---每隔5天的14:30执行
4)从什么时间到什么时间(连续的范围)
0 9-11 * * * - ---每天的9点到11点
5)从什么时间到什么时间(不连续范围)
0 00,22-23 * * * ---每天的0点,22点,23点
10,20 22-23 * * * ---每天的0点,22点,23点的10分和20分执行
常见编写错误:
在编写定时任务的时候, 一定不能把日期和周信息进行同时编辑
如:* * 15 * 5
测验: 编辑定时任务 实现/etc/hosts文件进行备份 /tmp/hosts_bak
1)每分钟都执行定时任务 *(每分钟) *(每小时) *(每天) *(每月) *(每周) 2)*/n 每隔多久 */10(每隔10分钟) */10(每隔10小时) */10 */10 */10 3)设置具体时间 0 0 * * * ---00:00执行 30 14 * * * ---14:30执行 30 14 */5 * * ---每隔5天的14:30执行 4)从什么时间到什么时间(连续的范围) 0 9-11 * * * - ---每天的9点到11点 5)从什么时间到什么时间(不连续范围) 0 00,22-23 * * * ---每天的0点,22点,23点 10,20 22-23 * * * ---每天的0点,22点,23点的10分和20分执行 常见编写错误: 在编写定时任务的时候, 一定不能把日期和周信息进行同时编辑 如:* * 15 * 5 测验: 编辑定时任务 实现/etc/hosts文件进行备份 /tmp/hosts_bak
—3.3 确认定时任务服务是否正在运行
1)确认定时任务服务是否正在运行 ps -ef|grep crond /etc/init.d/crond status 2)确认定制任务服务是否开机启动 chkconfig|grep crond chkconfig --list crond
—3.4 需求01:每分钟执行定时任务备份文件
需求01. 每分钟执行定时任务,进行备份文件 /etc/hosts
备份时候备份文件名称有日期信息显示,如下
cp -a /etc/hosts /tmp/hosts_2019-1-26_16:00
cp -a /etc/hosts /tmp/hosts_2019-1-26_16:01
编写方式:
* * * * * cp /etc/hosts /tmp/hosts_bak_$(date +%F_%H:%M) --错误
* * * * * cp /etc/hosts /tmp/hosts_bak_$(date +\%F_\%H:\%M) --正确
结论:
1)在定时任务执行的时候, 无法识别定时任务命令中的特殊字符%等
解决方法:特殊符号前面加上 \ 进行转译
解决方法:将有特殊符号的命令放入到脚本中进行运行
2)在定时任务中, 操作文件要写好绝对路径信息,如(sh ./backup.sh)
—3.5 需求02:每隔10分钟将几个目录打包
需求02. 每隔10分钟, 将/etc/hosts /etc/hostname /etc/selinux目录进行打包 将数据打包到/tmp/oldboy.tar.gz目录 (利用命令完成) */10 * * * * tar zcf /tmp/oldboy.tar.gz /etc/hosts /etc/hostname /etc/selinux/ 说明: 想让定时任务快速执行的方法 方法一: 先将定时任务执行的周期改为1分钟 方法二: 直接修改时间, 最好和最终期望执行时间相差1分钟以上 假设定时任务会在 10:00 执行 调整时间修改设置为09:58
—3.6 需求03:每分钟创建一个用户
需求03: 每分钟创建一个用户,自动创建oldgirl100 * * * * * useradd oldgirl100 环境变量: PS1 LANG OLDPWD UID PATH环境变量: 记录命令文件可以查找的路径信息 结论: 在定时任务中, 识别的$PATH环境变量信息只有 /usr/bin:/bin 解决方法:a.有些系统的特殊命令需要以绝对路径进行执行 b.可以在定时任务配置文件开始定义新的PATH环境变量信息(慎用)
—3.7 需求05:不想看到定时任务异常提示信息
需求04: 不想看到定时任务异常提示信息 异常提示: You have new mail in /var/spool/mail/root: 记录定时任务执行过程中的错误信息 问题一: 磁盘容量容易不够用 block不够用(不要产生 systemctl stop postfix.service) /var/spool/mail/root内容不断增加, 占用存储空间不断变大 问题二: 磁盘容量容易不够用 inode不够用(不要产生 systemctl start postfix.service) 因为当邮件服务停止后, 会在/var/spool/postfix/maildrop/产生大量小文件 结论:根本解决方式, 不让错误信息产生 错误信息 2>/etc/oldboy.txt 查看存储数值会不会增加 [root@linux ~]# cat /var/spool/mail/root |wc -l
—3.8 定时任务编写的注意事项
1)在定时任务执行的时候, 无法识别定时任务命令中的特殊字符%等 解决方法:特殊符号前面加上 \ 进行转译 解决方法:将有特殊符号的命令放入到脚本中进行运行 2)在定时任务中, 操作文件要写好绝对路径信息 3)在定时任务中, 识别的$PATH环境变量信息只有 /usr/bin:/bin 解决方法:a.有些系统的特殊命令需要以绝对路径进行执行 b.可以在定时任务配置文件开始定义新的PATH环境变量信息(慎用) 4)在执行定时任务时, 最后在所有任务命令后面加上 &>/dev/null或者 >/dev/null 2>&1 将错误数据信息重定向到系统黑洞中
—3.9 查看定时任务是否执行
[root@linux ~]# tail -f /var/log/cron Jan 26 17:10:01 oldboy-xiaodao CROND[2224]: (root) CMD (cp /etc/hosts /tmp/hosts_bak_$(date +) 01 02 03 04 01: 定时任务执行的时间 02: 执行定时任务的主机名称 03: 执行哪个用户定义定时任务 04: 执行定时任务的命令信息
4. 定时任务的注意事项
①定时任务规则之前加注释
表示定时任务在干什么
②使用脚本替代命令执行定时任务
超过两条命,就用脚本
脚本相当于命令的合集
③定时任务中date命令%百分号
* * * * * date +\%F\%T >>/oldboy/time.txt 2>&1
④运行脚本一定要用/bin/sh /bin/bash
因为默认脚本没有执行权限
⑤定时任务中-命令或脚本结果(正确及错误)
定向到黑洞(>/dev/null 2>&1)或追加到文件中 >>/tmp/oldboy.txt >/dev/null 2>&1
将错误数据信息重定向到系统黑洞中
⑥避免不必要的程序及命令输出
⑦打包压缩使用相对路径(切到目标目录的上一级打包目标)
⑧定时任务脚本中的程序文件 ,尽量用绝对路径
⑨系统与命令位置有关的环境变量问题
$PATH = /usr/bin:/bin
5. 编辑定时任务规范
—5.1 在定时任务中执行命令
第一个历程: 在命令行测试命令是否有问题
第二个历程: 将命令放入到定时任务中
第三个历程: 检查日志文件, 确认命令是否触发
—5.2 在定时任务中执行脚本
第一个历程: 在命令行测试命令是否有问题(测试脚本中命令)
第二个历程: 编写脚本信息, 并且授权脚本文件为执行权限
第三个历程: 命令行直接运行脚本
第四个历程: 编写定时任务的问题
第五个历程: 进行测试
6. 测验练习
1)每分钟将自己的名字追加到/oldboy/oldboy.txt中
第一个历程: 在命令行测试命令是否有问题
echo oldboy >>/oldboy/oldboy.txt
第二个历程: 将命令放入到定时任务中
* * * * * echo oldboy >>/oldboy/oldboy.txt
完善:
# cornd....注释信息
* * * * * /bin/echo oldboy >>/oldboy/oldboy.txt >/dev/null 2>&1
第三个历程: 检查日志文件, 确认命令是否触发
2)每分钟显示系统时间(年-月-日_周)追加到/tmp/time.log
第一个历程: 在命令行进行测试执行命令
date +%F_%w >>/tmp/time.log
第二个历程: 在脚本文件中编写脚本信息
vim /server/scripts/date_info.sh
/bin/date +%F_%w >>/tmp/time.log
第三个历程: 编写定时任务
# xxxxx
* * * * * /bin/sh /server/scripts/date_info.sh >/dev/null 2>&1
3)每天23到第二天7点每隔1小时重启nginx服务
# cronid-02 restart nginx
00 23,0-7 * * * echo "rstart nginx" &>/dev/null
—5.1 在定时任务中执行命令
第一个历程: 在命令行测试命令是否有问题 第二个历程: 将命令放入到定时任务中 第三个历程: 检查日志文件, 确认命令是否触发
—5.2 在定时任务中执行脚本
第一个历程: 在命令行测试命令是否有问题(测试脚本中命令) 第二个历程: 编写脚本信息, 并且授权脚本文件为执行权限 第三个历程: 命令行直接运行脚本 第四个历程: 编写定时任务的问题 第五个历程: 进行测试