Linux中的计划任务-Crontab

来源:互联网 发布:人工智能高清在线观看 编辑:程序博客网 时间:2024/06/03 18:04

Crontab是什么

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

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

Crontab实践

相关工具

开源免费的ssh工具:Putty工具

安装并检查Crontab服务

检查cron服务

  • 检查Crontab工具是否安装:crontab -l,无错误则正常安装
  • 检查crond服务是否启动:service crond status

注:Windows在运行中输入services.msc打开服务管理

安装cron

  • yum install vixie-cron
  • yum install crontabs

案例

// 每分钟都打印当前时间到一个日志文件中#crontab -e*/1**** date >> /tmp/log.txt// 保存退出// 动态查看log.txt最后几行信息#tail -f /tmp/log.txt

Crontab的基本组成

                        系统服务                       配置工具---------               ------                        --------|配置文件|    ----->     |crond|        <-----         |crontab|--------                ------                        --------文件方式设置定时任务  每分钟都会从配置文件刷新定时任务       用于调整定时任务

Crontab的配置文件格式

 * * * * * COMMAND| | | | || | | | ----->星期0~7(0或者7表示星期天)| | | ------->月份1~12| | --------->日期1~31| ----------->小时0~23------------->分钟0~59
  • 每晚的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 restart1-59/2 * * * * service httpd restart
  • 晚上11点到早上7点之间,每隔一小时重启apache
注:分钟不能为*,否则意思为晚上11点到早上7点之间,任何一分钟都可以重启apache0 23-7/1 * * * service httpd restart 
  • 每天18:00至23:00之间每隔30分钟重启apache
0,30 18-23 * * * service httpd restart0-59/30 18-23 * * * service httpd restart

小结

  • *表示任何时候都匹配
  • 可以用”A,B,C”表示A或者B或者C时执行命令
  • 可以用”A-B”表示A到B之间时执行命令
  • 可以用”*/A”表示A分钟(小时等)执行一次命令

Contab工具的使用

  • 查看某用户的计划任务列表: crontab [-u user] -l

  • 修改某用户的计划任务:crontab -e

  • 查看生成的最终计划任务文件: /var/spool/cron

  • 查看crontab执行日志:tail -f /var/log/cron

注:crontab [-u user] …. 编辑某个用户的crontab任务

Crontab配置文件

  • 全局(系统)配置文件: /etc/crontab
// 编辑/etc/crontab文件// ***** user-name  command// 每分钟root用户执行计划任务*/1 * * * * root echo "JOB IN THE /etc/crontab FILE"
  • 其他配置文件:/etc/cron.d/sysstat
// 以root用户编辑/etc/cron.d/sysstat文件#vim /etc/cron.d/sysstat// 修改后保存// 重新载入sysstat文件#crontab /etc/cron.d/sysstat

在/etc/cron.d/目录下创建计划任务文件corntest
注:crontest文件的计划任务也是可以生效的

#vim crontest*/1 **** crontester echo "job in crontest file"// 保存并退出// crontab 无法管理我们自己创建的crontest文件,但crontest文件中的计划任务已生效

Crontab命令操作的文件

// crontab操作的文件为/etc/spool/cron/root#crontab -l   // 这里默认为root用户#cat /var/spool/cron/root// 显示不同用户的计划文件#ls /var/spool/cron

Crontab日志

/var/log/cron文件保存着cron的任务执行记录

#tail -f /var/log/cron

Crontab常见错误

  • 环境变量
  • 命令行双引号中使用%时,未加反斜线\
  • 第三和第五个域之间执行的是 “或” 操作
  • 分钟设置无用

环境变量

// 在.bash_profile中export一个APPDIR#vim .bash_profileAPPDIR=/etcexport APPDIR// 保存并退出#source .bash_profile#echo APPDIR/etc// 在crontab中打印APPDIR这个环境变量#crontab -e*/1 * * * * echo $APPDIR >> /tmp/appdir.log// 保存退出#tail -f /tmp/appdir.log// 显示空行// 因此crontab任务无法访问环境APPDIR变量

第三和第五个域之间执行的是 “或” 操作

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

// 日期和星期是或操作,下面则表示1号-7号和四月中的星期日那天都会执行59 1 1-7 4 0 /root/a.sh// 利用shell命令判断是否是周日来执行脚本,注:这里%要用\转义59 1 1-7 4 * test `date +\%w` -eq 0 && /root/a.sh
// 注:test的用法#test 1 = 0 // 不能写成 test 1=0,否则结果为0,test把1=0当成字符串#echo $?1// 或使用#test 1 -eq 0

分钟设置无用

两个小时运行一次

// 错误的设置,下面0时每一分钟都可以执行* 0,2,4,6,8,10,12,14,16,18,20,22 * * * date// 正确设置0 */2 * * * date// 先满足1-20约束,再满足每隔2分钟执行,即1 3 5 7 9 11 .. 19分执行date1-20/2 * * * * date 

Crontab补充

Crontab中最小只能设置到每分钟执行一个命令,如果想没半分钟执行某个命令怎么做到?

通过shell脚本的sleep命令配合Crontab即可完成这一功能

// 例如date && sleep 30s && date// 利用sleep休眠30s来延迟执行另一个cmd#crontab -e*/1 * * * * date >> /tmp/date.log*/1 * * * * sleep 30s; date >> /tmp/date.log

参考

慕课网Linux中计划任务-Crontab

0 0
原创粉丝点击