cron 12点执行_【技术指南】Crontab调度重复执行的任务

本文介绍了Crontab作为周期性任务工具的原理和实践,包括检查安装、服务启动、配置文件格式、工具使用以及常见错误。通过实例展示了Crontab的配置,如每分钟执行任务、特定时间重启服务,并解析了分钟设置误用等错误。最后,讨论了&&、||和;的区别,并提供了一个定时备份Oracle数据的案例。
摘要由CSDN通过智能技术生成
0e78bdaf-6b58-eb11-8da9-e4434bdf6706.svg

点击上方蓝字关注我们

1178bdaf-6b58-eb11-8da9-e4434bdf6706.svg 63be687bd17e717282773f9a3d68308d.png

e4ee7ca9699995470adbac9358f0274a.png

Crontab是什么

641276c6613d1b29daedb74228e6b695.png

  • Crontab是一个用于设置周期性执行任务的工具;

  • 周期性执行的任务我们称为Cron Job;

  • 周期性执行的任务列表我们称为Cron Table。

Crontab实践

1. 安装并检查Crontab服务 1.1 检查cron服务

– 检查crontab工具是否安装:crontab -l
– 检查crond服务是否启动:service crond status

1.2 安装cron

– yum install vixie-cron
– yum install crontabs

注意

a. 检查crontab服务状态:service crond status

 控制服务的一些提示:service crond

b. 检查Apache(阿帕奇)服务状态:service httpd status

 控制服务的一些提示:service httpd
(检查服务状态,服务名后面一般都加d,如crond、httpd)

add11dcdd474564344fcb0ccbb909aeb.png

2. 案例实现

每分钟都打印当前时间到一个文件中

service crond status #查看服务是否启动service crond start  #如没有启动服务,启动服务crontab -l  #查看当前定时任务列表crontab -e  #打开定时任务列表文件,进行编辑*/1 * * * * date >> /tmp/log.txt  #在最后一行插入内容,保存退出(注意*间的空格)tail -f /tmp/log.txt  #监听log.txt文件内容(动态刷新)date #查看当前时间

3. Crontab的基本组成

76e4cffc3a7889f0ab7fa6ceaa1d7167.png

crontab的基本组成:

  • 1)系统服务CROND:
    每分钟都会从配置文件刷新定时任务

  • 2)配置文件:
    文件方式设置定时任务

  • 3)配置工具crontab:
    用于调整定时任务

4. Crontab的配置文件格式

68913614981a0280e9ec30e22fd9eb4f.png

举例:

eg1.每晚的21:30重启apache

30 21 * * * service httpd restart

eg2.每月1,10,22日的4:45重启apache

45 4 1,10,22 * * service httpd restart

eg3.每月1-10日的4:45重启apache

45 4 1-10 * * service httpd restart

eg4.每隔两分钟重启apache

*/2 * * * * service httpd restart1-59/2 * * * * service httpd restart(奇数分钟重启) 0-58/2 * * * * service httpd restart(偶数分钟重启)

eg5.每晚11-早上7点之间,每隔一个小时重启apache

* 23-7/1 * * * service httpd restart

eg6.每天18:00-23:00之间每隔30分钟重启apache

0,30 18-23 * * * service httpd restart0-59/30 18-23 * * * service httpd restart
0ebdbc3ab00d504ba98c77bfb0917149.png d7a37fc68ccd5498fdecaba2368117ea.png 40ba7be71def37f04b8fdb1bd543bce9.png

8b99a2ce1cab5f1234904ea4fe6cf74f.png

5. Crontab工具的使用

通过 man crontab 或者 crontab --help 查看

查看某用户的计划任务列表:

crontab -u 用户名 -l(默认-u为当前登录用户)

修改某用户的计划任务:

crontab -e

删除crontab文件:

crontab -r [username]

root可以指定用户删除其他用户的crontab文件。其他用户只可以删除自己的crontab文件

查看生成的最终计划任务文件:

/var/spool/cron

crontab日志位置:

/var/log/cron

6. Crontab的配置文件

870c6802942fe93796076816b71487d4.png

1. 用户的crontab定时任务保存文件:
/var/spool/cron/root
或者:/var/spool/cron/tabs/root
2. 全局(系统)配置文件:
– /etc/crontab
– 注意格式

利用命令crontab -e 进入的是用户级别的计划任务。
用 vi /etc/crontab 进入后编辑的是系统级的计划任务。b96ee0ec6b16e440bffab8f1fe280102.png

cd /etcls cron*tail -f /var/log/cron(任务执行日志)crontab -e实际上是在修改目录/var/spool/cron/root下的用户对应的文件cd /etc/cron.dvi sysstatcrontab sysstatcrontab 文件名 会把(crontab -e)文件里的内容都覆盖 ,所以要非常小心crontab -l -u crontester查找某个用户下的定时程序cron.d可以认为是对系统级配置的补充,crontab -l,crontab -e看不到,编辑不了cron.d里的配置可以在该文件夹下自己创建 vi crontest*/1 * * * * echo 'file in cron.d/crontest'tail -f /var/log/cron

7. Crontab的日志

  • /var/log/cron 保存着所有的crontab的操作

  • /var/spool/mail/ 下以邮件的方式发送日志信息

Crontab的常见错误

1. Crontab的常见错误之环境变量

不可引用环境变量

cd ~

ls -a可以看到有.bash_profile文件

vim .bash_profile
新增一个环境变量:

--------------APPDIR=/ectexport APPDIR-----------------

更新到环境变量:

source .bash_profile

检验:echo $APPDIR 可以正常显示,能够被识别
但是在下面这条命令行添加在crontab里不能被识别

*/1 * * * * echo $APPDIR >> /tmp/appdir.log

在/var/log/cron任务执行日志中可以看到,但是cat打开/tmp/appdir.log内容是空的

2. Crontab的常见错误之命令行操作

  • 1. test 表达式 测试后面的表达式是否真实,但必须加空格 (如果不加空格,那么该命令恒为正确的。)

    例如:test 1 = 0 如果结果是0 ,那么是正确的(与C语言相反)

  • 2. 通过echo $?来查看上一次的执行结果。

  • 3. date +%w 这个是显示今天是星期几

  • 4. 需要注意的是在crontab文件中,%需要进行转义

第三个和第五个域之间执行的是或操作 即 星期几和每月几号是或关系。

例:4月的第一个星期日早晨1时59分运行a.sh

①59 1 1-7 4 0 /root/a.sh 错误的写法
②59 1 1-7 4 * testdate +%w-eq 0 && /root/a.sh 正确的写法

e711439e036625f7d476c138e9dab355.png

3. Crontab的常见错误之分钟设置误用

两小时运行一次date命令

错误:

* 0,2,4,6,8,10,12,14,16,18,20,22 * * * date

正确:

0 */2 * * * date

4. Crontab综合案例解析

b8b3a1b65892f7d371876809012656f2.png

crontab最小时间是1分钟,控制1分钟执行多次
本应该是同时执行,但第二条被推迟了30s执行,效果就是1分钟执行了2次

*/1 * * * * date>>/root/test/half.log*/1 * * * * sleep 30s;date>>/root/test/half.log

&& 和|| 和 ;的区别

  • command1 && command2: &&左边的command1执行成功(返回0表示成功)后,&&右边的command2才能被执行。

  • command1 || command2: 如果||左边的command1执行失败(返回1表示失败),就执行&&右边的command2。

  • command1;command2: 命令顺序执行,不管前面的是否正确后面的都会依次执行

定时备份oracle数据

#!/bin/bashexport ORACLE_BASE=/data/oracleexport ORACLE_HOME=/oracle/product/102export ORACLE_SID=sidnameexport ORACLE_TERM=xtermexport PATH=$ORACLE_HOME/bin:/usr/sbin:$PATHexport LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/libexport LANG=Cexport NLS_LANG=AMERICAN_AMERICA.AL32UTF8#以上代码为Oracle数据库运行账号oracle的系统环境变量设置,必须添加,否则crontab任务计划不能执行。date=date +%Y_%m_%d   #获取系统当前日期时间days=5  #设置删除5天之前的备份文件orsid=ip:port/sidname #Oracle数据库服务器IP、端口、SIDorowner=master_ccpx2  #备份此用户下面的数据bakuser=master_ccpx2   #用此用户来执行备份,必须要有备份操作的权限bakpass=passwd  #执行备注的用户密码bakdir=/aaa/bbb/oracle_data  #备份文件路径,需要提前创建好bakdata=$orowner"_"$date.dmp #备份数据库名称baklog=$orowner"_"$date.log #备份执行时候生成的日志文件名称ordatabak=$orowner"_"$date.tar.gz #最后保存的Oracle数据库备份文件cd $bakdir #进入备份目录mkdir -p $orowner #按需要备份的Oracle用户创建目录cd $orowner #进入目录exp $bakuser/$bakpass@$orsid grants=y owner=$orowner file=$bakdir/$orowner/$bakdata log=$bakdir/$orowner/$baklog #执行备份tar -zcvf $ordatabak $bakdata  $baklog  #压缩备份文件和日志文件find $bakdir/$orowner  -type f -name "*.log" -exec rm {} \; #删除备份文件find $bakdir/$orowner  -type f -name "*.dmp" -exec rm {} \; #删除日志文件find $bakdir/$orowner  -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} \;  #删除5天前的备份
699e425f60b0eed9279a4f1b692e2b18.png

如果有想要了解更多内容或需要更多资料的小伙伴

可以 扫码 参与

原价398元现在仅需 

Linux运维实战训练营!

2天从理论到实战

get原厂面试官最喜欢问的面试点

新盟官方金牌讲师手把手带你

零基础进阶运维大佬!

3567bbc7de1badaa0b81d3aaad2c2588.png adee2a7316c8893157bf66869c9ad157.gif 4aa9dc1c843340ea707d5eaa63e9b867.png 327420a4007bbdb72a5728cded9462b7.png

扫码加老师

获取小白专属福利

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值