书史足自悦,安用勤与劬。这篇文章主要讲述Linux中的计划任务—Crontab调度重复执行的任务相关的知识,希望能为你提供帮助。
文章目录
- ??目标??
- ??背景介绍??
- ??Crontab是什么??
- ??Crontab实践??
- ??安装并检查Crontab服务??
- ??1、检查cron服务:??
- ??2、安装cron??
- ??案例实现??
- ??Crontab的基本组成??
- ??Crontab的配置文件格式??
- ??小栗子??
- ??eg1.每晚的21:30重启apache??
- ??eg2.每月1,10,22日的4:45重启apache??
- ??eg3.每月1-10日的4:45重启apache??
- ??eg4.每隔两分钟重启apache??
- ??eg5.每晚11-早上7点之间,每隔一个小时重启apache??
- ??eg6.每天18:00-23:00之间每隔30分钟重启apache??
- ??Crontab工具的使用??
- ??1、查看某用户的计划任务列表:??
- ??2、修改某用户的计划任务:??
- ??3、删除crontab文件??
- ??4、查看生成的最终计划任务文件:??
- ??5、crontab日志位置:??
- ??Crontab的配置文件??
- ??Crontab的日志??
- ??Crontab的常见错误??
- ??Crontab的常见错误之环境变量??
- ??Crontab的常见错误之命令行操作??
- ??Crontab的常见错误之分钟设置误用??
- ??Crontab综合案例解析??
- ??& & 和|| 和 ; 的区别??
- ??定时备份oracle数据??
目标本博文的主要目的是让笔者和读者可以了解并掌握以下内容:
1、Crontab的基本概念
2、Crontab的基本组成
3、操作Crond服务
4、配置系统和用户计划任务
5、监控计划任务日志
背景介绍
文章图片
在工作中你是否也碰到过这种定时重复的工作呢?
Crontab可以帮助你从这些定时重复的工作中解脱出来
Crontab是什么
文章图片
- 1.Crontab是一个用于设置周期性执行任务的工具;
- 2.周期性执行的任务我们称为Cron Job;
- 3.周期性执行的任务列表我们称为Cron Table。
1、检查cron服务:
– 检查crontab工具是否安装:crontab -l
– 检查crond服务是否启动:service crond status
2、安装cron
– yum install vixie-cron
– yum install crontabs
注意:
1、检查crontab服务状态:?
?service crond status?
?控制服务的一些提示:?
?service crond?
?2、检查Apache(阿帕奇)服务状态:?
?service httpd status?
?控制服务的一些提示:?
?service httpd?
?(检查服务状态,服务名后面一般都加d,如crond、httpd)
文章图片
案例实现?每分钟都打印当前时间到一个文件中?
service crond status #查看服务是否启动< br>
service crond start #如没有启动服务,启动服务< br>
crontab -l#查看当前定时任务列表< br>
crontab -e#打开定时任务列表文件,进行编辑< br>
*/1 * * * * date > > /tmp/log.txt#在最后一行插入内容,保存退出(注意*间的空格)< br>
tail -f /tmp/log.txt#监听log.txt文件内容(动态刷新)
date #查看当前时间
Crontab的基本组成
文章图片
crontab的基本组成:
- 1)系统服务CROND:
每分钟都会从配置文件刷新定时任务 - 2)配置文件:
文件方式设置定时任务 - 3)配置工具crontab:
用于调整定时任务
文章图片
小栗子
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 restart
1-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 restart
0-59/30 18-23 * * * service httpd restart
文章图片
文章图片
文章图片
文章图片
Crontab工具的使用通过 ?
?man crontab?
?? 或者 ??crontab --help?
? 查看1、查看某用户的计划任务列表:
crontab -u 用户名 -l(默认-u为当前登录用户)
2、修改某用户的计划任务:
crontab -e
3、删除crontab文件
crontab -r [username]
root可以指定用户删除其他用户的crontab文件。 其他用户只可以删除自己的crontab文件
4、查看生成的最终计划任务文件:
/var/spool/cron
5、crontab日志位置:
/var/log/cron
Crontab的配置文件
文章图片
1、用户的crontab定时任务保存文件:
/var/spool/cron/root
或者:/var/spool/cron/tabs/root
2、全局(系统)配置文件:
– /etc/crontab
– 注意格式
1.利用命令crontab -e 进入的是用户级别的计划任务
2.用 vi /etc/crontab 进入后编辑的是系统级的计划任务
文章图片
cd /etc
ls cron*
tail -f /var/log/cron(任务执行日志)
crontab -e实际上是在修改目录/var/spool/cron/root下的用户对应的文件
cd /etc/cron.d
vi sysstat
crontab sysstat
crontab 文件名 会把(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
Crontab的日志
- /var/log/cron 保存着所有的crontab的操作
- /var/spool/mail/ 下也会以邮件的方式发送日志信息
cd ~
?
?ls -a?
?可以看到有.bash_profile文件
?
?vim .bash_profile?
?新增一个环境变量
--------------
APPDIR=/ect
export APPDIR
-----------------
更新到环境变量:
source .bash_profile
检验:
?
?echo $APPDIR?
? 可以正常显示,能够被识别但是在下面这条命令行添加在crontab里不能被识别
*/1 * * * * echo $APPDIR > > /tmp/appdir.log
————————————————————————
在/var/log/cron任务执行日志中可以看到,但是cat打开/tmp/appdir.log内容是空的
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 * test?
?date +%w??-eq 0 &
&
/root/a.sh?
? 正确的写法文章图片
Crontab的常见错误之分钟设置误用两小时运行一次date命令
?错误:?
* 0,2,4,6,8,10,12,14,16,18,20,22 * * * date
?正确:?
0 */2 * * * date
Crontab综合案例解析
文章图片
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: 命令顺序执行,不管前面的是否正确后面的都会依次执行
#!/bin/bash
export ORACLE_BASE=/data/oracle
export ORACLE_HOME=/oracle/product/102
export ORACLE_SID=sidname
export ORACLE_TERM=xterm
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export LANG=C
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
#以上代码为Oracle数据库运行账号oracle的系统环境变量设置,必须添加,否则crontab任务计划不能执行。
date=date +%Y_%m_%d#获取系统当前日期时间
days=5#设置删除5天之前的备份文件
orsid=ip:port/sidname #Oracle数据库服务器IP、端口、SID
orowner=master_ccpx2#备份此用户下面的数据
bakuser=master_ccpx2#用此用户来执行备份,必须要有备份操作的权限
bakpass=passwd#执行备注的用户密码
bakdir=/aaa/bbb/oracle_data#备份文件路径,需要提前创建好
bakdata=https://www.songbingjia.com/android/$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天前的备份
【Linux中的计划任务—Crontab调度重复执行的任务】
推荐阅读
- 刷题打卡第二天(数组(快慢指针法))
- #yyds干货盘点# Java 基础 - 面向对象的三大特性
- Linux系统编程应用 Linux Input子系统
- Linux卸载MySQL
- #yyds干货盘点# 解决华为机试(高精度整数加法)
- C语言Linux下动态库和静态库详解
- Android C++系列(Linux进程)
- # yyds干货盘点 # Pandas入门教程
- Linux系统编程应用 Linux输入子系统(二)