首页 > 开发 > linux > 正文

干货 | crontab课堂笔记

2016-07-12 20:54:04  来源:慕课网
  Crontab简介
被周期行执行的任务我们称为Cron Job
周期性执行的任务列表我们称为Cron Table
相关工具
Putty 远程管理linux的软件
安装并检查Crontab服务
检查cron服务
-检查Crontab工具是否安装:crontab –l
-检查crond服务是否启动:service crond status
//service * status判断服务是否在启动当中
//大部分后边加d表示服务
安装cron
-yum install vixie-cron
-yum install crontabs
一般linux默认安装
一个简单的例子
每分钟都打印当前时间到一个日志文件中
-/1 date >> /tmp/log.txt
Crontab –e
在文件末尾加上/1 date >> /tmp/log.txt保存退出
Crontab –l 查看任务
Crontab的基本组成**
系统服务 配置工具
配置文件  crond  crontab
文件方式设置 每分钟都会从配置 用于调整定时任务
定时任务 文件刷新定时任务
  Crontab的配置文件格式
COMMAND
分钟0~59
小时0~23
日期1~31
月份1~12
星期0-7(0或7表示星期天)
 每晚的21:30重启apache
30 21 service httpd restart
 每月的1、10、22日的4:45重启apache
45 4 1,10,22 service httpd restart
 每月的1到10 日的4:45重启apache
45 4 1-10 service httpd restart
 每隔两分钟重启Apache服务
/2 service httpd restart
1-59/2 service httpd restart
 晚上11点到早上7点之间隔一个小时重启apache
0 23-7/2 service httpd restart
 每天18:00之23:00每隔30分钟重启apache
0,30 18-23 service httpd restart
0-59/30 18-23 service httpd restart
 小结
—表示任何时候都匹配
-可以用“A,B,C”表示A或者B或者C时执行命令
-可以用“A-B”表示A到B之间时执行命令
-可以用“*/A”表示每A分钟(小时等)执行命令
Crontab工具的使用
 查看某用户的计划任务列表crontab -l
 修改某用的计划任务crontab -e
 查看生成的最终计划任务文件/var/spool/cron
Crontab配置文件
 全局(系统)配置文件/etc/crontab注意格式
Vim /etc/crontab 也能增加计划任务
增加一条计划任务
/1 * root echo “JOB IN THE /etc/crontab FILE ***
一般不直接crontab -e 一般改文件在 crontab 将文件导入进来
Vim crontst
/1 * user echo “file in /etc/cron.d/crontst****”
Crontab –l –u user
会发现刚才的不会出现,crontab不能编辑系统级的配置文件,cron.d的文件是系统文件的一个补充,在里边创建一个计划任务时也可以生效,作为系统任务,crontab –l或者-e时看不到,在日志里边可以看到
Cat /var/spool/cron/root 和crontab –l是一样的
做一个实验 修改/var/spool/cron/root 完全映射到了crontab –l里边,和crontab –e效果是一样的
 Root配置文件
-只有root用户才会把这些内容载入到计划任务表中
Crontab的日志
 /var/log/cron文件保存着cron的任务执行记录
Ls –l cron
可以看到每一天都有一个cron日志的变化,今天的叫cron,其他的是cron+时间
Cd /var/spool/mail
Tail -100 root会发现每一个都会以邮件的方式发送给这个用户,能扣看到一些相关的日志信息
一般来说可能/var/log/cron就够了
Crontab的常见错误*
 环境变量
Cd ~
有一个.bash_profile设置环境变量,source .bash_profile
Echo $设置的环境变量可以正常显示
但是在/1 echo $环境变量 >> /tmp/appdir.log
并不会正常写入,只有空行,环境变量并没有导入到脚本中
 命令行双引号中使用%时,未加反斜线\
. 59 1 1-7 4 test date +\%w -eq 0 && /root/a.sh
 第三和第五个域之间执行的是“或”操作
-四月的第一个星期日早晨1点59分运行a.sh
. 59 1 1-7 4 0 /root/a.sh//或的关系1-7和星期日都会执行
. 59 1 1-7 4 test date +\%w -eq 0 && /root/a.sh
Test测试后边的判断成不成功 1 不成功 0成功
如果用“=”测试前后要加空格
&& 与操作,前边成功时执行 或操作前边不成功时执行
 分钟设置的误用两小时运行一次
0,2,4,6,8 date 错误的,每分钟都会执行
正确应该将分钟设置成0
0 /2 date
综合案例解析
 Crontab中最小只能设置到每分钟执行一个命令,如果想每半分钟执行某个命令怎么做到?
-通过shell脚本的sleep命令配合crontab即可完成这一功能
-date && sleep0.5s && date
/1 date >>wenjan
/1 * sleep 30s;date >>wenjain