Linux:crond(crontab)定时任务
一、、定义
Crond 是linux系统中用来定期执行命令或指定程序任务的一种服务或者软件。一般在安装完系统时,crond会默认存在。
crond默认每分钟会检查系统中是否有需要执行的定时任务。如果有,则会根据实现定义好的 规则执行这个定时任务
秒级任务:crond实现不了,,一般自己写shell守护进程
二、为什么需要定时任务
定时任务可以帮我们实现自动备份。
window定时任务:
开始-附件-系统工具-任务计划程序-创建基本任务
linux定时任务:分为两种,
1、系统自身定期执行的任务 /etc/cron
2、用户执行的定时任务
三、定时任务分类
1)at 适合执行一次就结束的定时任务。一般不怎么用,依赖服务atd
2)anacron 适合非7*24h开机的服务器准备。一般以天为周期,或每次开机后执行的。检测停机期间没有执行的任务,在开机后一次性执行一遍。
3)crond 默认每分钟检查是否有要执行的任务,有的话执行。crond是一个定时任务的守护进程。crontab时一个命令,是用户来设置定时任务规则的
四、常用命令
crontab -l 查看crontab内容(内容在 /var/spool/cron/root 文件中,其中root是用户的名字。) 该命令=======cat /var/spool/cron/root
crontab -e 编辑crontab内容,且可以帮助检查语法。如果语法有错会无法保存。该命令=======vi /var/spool/cron/root ,vi不会检查语法
crontab -i 删除crontab内容,删除前会确认提示(用的很少)
crontab -r 删除crontab内容
crontab -u user 指定使用的用户执行任务
五、定时任务指令的使用格式
用户的定时任务分为6段,每段之间用空格分开,前5段为时间的设定段。第6段为所要执行的命令或脚本任务。系统的定时任务分为8段
时间段的格式:
01 * * * * cmd 命令
02 * * * * /bin/sh xx.sh 脚本文件
第一列:分钟,minnite 数值在0-59,如果*,表示每分
第二列:小时,hour 数值在0-23,如果*,表示每小时
第三列:日,day 数值1-31,如果*,表示每日
第四列:月,month 数字1-12,如果*,表示每月
第五列:星期 day of week 数字0-7(sunday=0或者7)
语法中的符号:
* 表示任意时间都。假设00 23 * * * cmd 表示每天23点00做cmd任务。日月周都用*代替
- 表示一个时间范围,假设00 17-19 * * * cmd 表示每天的17-19点整点做cmd任务,也就是17,18,19点做
, 分割时间段,假设30 17,18,19 * * * cmd,表示每天的17点30,18点30,19点30,执行cmd任务
/n 每隔n单位, n表示数字。假设 */10 * * * * cmd表示每隔10min执行一次cmd
/etc/init.d/crond stats 查看crond服务状态
实例:
创建一个定时任务,每分钟向一个文件中增加内容
1、编辑定时任务,crontab -e 写定时任务命令 * * * * * echo zy >> /server/log/zy.log 每分钟向zy.log文件输入zy
2、保存
3、查看定时任务 crontab -l
4、tail -f /server/log/zy 实时监控,看是否实行了定时任务
脚本文件以.sh结尾。执行脚本文件 sh xxx.sh
创建要给定时任务,放到sh文件中,执行。
crontab -e ,或者操作/var/spool/cron/root
echo "00 09,14 * * 6,7 /bin/sh /server/scripts/zy.sh" >> /var/spool/cron/root >/dev/null 2>&1
定时任务结尾要加上 >/dev/null 2>&1 等价于1>/dev/null 2>/dev/null ,意思就是把所有输出都追加到/dev/null中。
2>&1就是把标准错误重定向到标准输出(>&)
1> 正确的结果追加进后面的文件
2> 错误的结果追加进后面的文件
echo aaa 1>a.log 2>b.log 结果,会发现aaa追加进入了a.log中,因为前面echo aaa没有错误,正确,所以追加到1>a.log中
ech aaa 1>a.log 2>b.log 结果,会发现aaa追加进入了b.log中,因为前面ech aaa有错误
如果不加 >/dev/null 2>&1 邮件服务/var/spool/clientmqueue/ 文件数会过多,导致inode被耗尽。当定时任务被执行时,会给系统发邮件,系统默认的时sendmail服务经常是关闭的,所以定时任务发送的邮件就会临时堆在/var/spool/clientmqueue/.时间久了,文件数就会很多。
当过多时,可以进入目录中,删除 ls | xargs rm -rf
rpm -qa | grep sendmail 查看是否安装了这个邮件服务。然后看 var/spool/是否有这个clientmqueue 目录。如果都没有,那执行定时任务的时候也就不会发邮件,不会出现满的现象
如果sendmail服务启动,/etc/init.d/sendmail start ,则就会把/clientmqueue/目录下的文件发送出去,可以查看下,就没有了
六、给指定用户创建定时任务
crontab -u zy -e 创建定时任务。成功后,会再/var/spool/cron/下生成一个zy文件,可查看定时任务
七、系统定时任务
/var/log/messages
/var/log/secure
/var/log/maillog
/var/log/spooler
/var/log/boot.log
/var/log/cron
八、环境变量导致定时任务失败
定时任务脚本中,如果有系统或者用户环境变量,会不识别。需要重新定义,或者加载下放环境变量的文件
九、定时任务的log在/var/log/cron可看
最新文章
- zoom在css中的作用
- Deep Learning 24:读论文“Batch-normalized Maxout Network in Network”——mnist错误率为0.24%
- Python:线程
- Tiny Rss简明安装与配置笔记
- C# 值类型和引用类型的区别
- C# 将datatable 转换json
- JavaScript之JS实现动画效果
- YaHoo Web优化的14条法则
- [51nod1407]与与与与
- python自定义函数可以向前引用不用声明
- 牛客网编程练习之PAT乙级(Basic Level):1041 说反话
- JS --- 如何获取一个对象的类型
- Springboot的2种启动方式
- php 会话控制(关于session的维护与生命周期)
- Mysql 关键字
- I - Interesting Calculator (bfs使用优先队列求步数最小或者花费最小)
- Linux虚拟机上安装redis
- 计算字符串相似度算法—Levenshtein
- Astah Professional安装
- Docker windows下安装并搭建Nodejs的webapp
热门文章
- ALGEBRA-2 有限维向量空间
- 剑指Offer顺时针打印矩阵
- python智能图片识别系统(图片切割、图片识别、区别标识)
- Maven报错Missing artifact jdk.tools:jdk.tools:jar:1.7
- setjmp()/longjmp()的使用方法
- idea提升效率的插件
- Spring Security-获取当前登录用户的详细信息
- Spring Boot Jpa 多条件查询+排序+分页
- Git仓库由HTTPS切换成ssh秘钥连接
- 「Netty实战 02」手把手教你实现自己的第一个 Netty 应用!新手也能搞懂!