9.Linux的定时任务
来源:互联网 发布:300451 创业软件 编辑:程序博客网 时间:2024/06/05 06:51
Linux的定时任务
定时任务(调度任务)
Linux的定时任务,通过crond服务实现。
2.1 crond是什么?
crond, 就是一种守护进程,
可用来定期地执行命令或者指定的程序。
crond服务,默认已经安装。
2.2 crond的功能
可以实现各种定时任务,
可以精确到分钟。
如果需要每秒中执行1个定时任务, 直接用crond实现不了。 可以用脚本文件实现: 例如: while true; do echo "hello world" sleep 1 done
2.3 为什么要使用定时任务
服务器, 7*24小时都开机提供服务的。
有一些重要数据,每天都需要备份一次。
就需要使用定时服务。
Linux定时任务的分类
1)系统自身的定时任务
2)用户自定义的定时任务
这两类定时任务,都需要通过crond服务来实习。
Linux定时任务的类型:
1)at 只执行1次。
2)anacron
用来检测听机期间,没有执行的任务。
然后再开机后,把这些任务全部执行。
最多只执行1次。
3)crond
怎样使用用户自定义的定时任务:
crontab
# crontab -l
查看当前用户的定时任务
# crontab -e
编辑当前用户的定时任务
编辑完毕后保存时,会自动检查格式,
如果格式不合法,就不保存。
如果格式合法,就保存到/var/spool/cron/root 如果是用户zhangfei,那么就保存到 /var/spool/cron/zhangfei 要点: 不要直接编辑用户的定时任务文件: /var/spool/cron/root 因为,直接用vim编辑它时,不会自动检查语法。 使用crontab -e 就能自动检查语法。
用户定时任务的格式
分 时 日 月 周 命令或者执行脚本
* * * * * echo “hello world” >> /tmp/mytest.log
第1列为 *, 就表示每分钟
00, 就表示分钟时刻为00
*/3, 就表示每3分钟
30,40 就表示30分钟和40分钟
30-40 就表示30,31,32,…. 40 共11次
第2列为 *, 就表示每小时
第3列为 *, 就表示每天
第4列为 *, 就表示每月
第5列为 *, 就表示每周
0和7都表示周日
实例:
30 3,12 * * * /bin/sh /tmp/test.sh
每天的凌晨3:30和中午12:30,执行/tmp/test.sh
30 /6 * * /bin/sh /tmp/test.sh
30 8-12/2 * * * /bin/sh /tmp/test.sh
30 21 * * * /bin/sh /tmp/test.sh
45 4 1,10,22 * * /bin/sh /tmp/test.sh
10 1 * * 6,0 /bin/sh /tmp/test.sh
00 /1 * * /bin/sh /tmp/test.sh
每小时的整点时刻执行1次
- 23,00-07/1 * * * /bin/sh /tmp/test.sh
每天晚上11点以及凌晨0点到7点,每分钟执行1次。
00 11 * 4 1-3 /bin/sh /tmp/test.sh
每年的4月分的周1到周3的上午11点整,执行1次
00 11 5 4 1 /bin/sh /tmp/test.sh
错误:周和日不要同时使用。
练习:
1)每分钟,答应1次自己的名字到 /tmp/log/test.log 中
2)每周1到周5的晚上6:30签到上晚自习,
在/tmp/log/study.log文件中记录姓名和时间。
定时任务的编写要点:
1. 对于一般的定时任务,可以先把这个任务的时间调整为每分钟1次,以便于测试。
测试正确后,再修改时间。
对于有影响的定时任务,就应该在自己的测试环境下测试。
测试没有问题后,在放到生产环境。
2.
定时任务的最后1列,最好先在终端中执行,确定没有问题后,再复制到定时任务中。
定时任务中的路径,最好都用绝对路径。
每个定时任务,都应该加注释(用#)
- 定时任务如果是执行脚本文件,那么就最好使用/bin/sh 来执行,
而不要直接执行脚本文件。
即: /bin/sh 脚本文件名
可以避免脚本文件没有可执行属性,而导致错误 - 超过两行的命令,就最好用1个脚本文件来实现。
当需要为指定用户定义定时任务时,
最后先切换到该指定用户,然后再定义定时任务。定时任务的后面, 最好加上
/dev/null 2>&1
如果在定时任务后面不加以上部分,就可能很快导致“磁盘空间满“
原因:定时任务每次被执行后,就会自动的给用户发1封邮件,
而如果没有开启邮件服务,就会把邮件作为1个文件发送到
/var/spool/clientmqueue/,就会导致该目录下文件数据巨增
从而使inode号耗尽!而每创建1个文件,就需要1个inode/dev/null 表示linux的垃圾箱
/dev/null 就把前面的输出(1)重定向到垃圾箱
2 >& 1表示把标准错误输出(2)重定向到标准输出(1)
就等效与,把标准输出和标准错误输出,都重定向到回收站在定时任务,不要随意的打印输出信息。
如果确实需要输出信息,那么应该把输出信息重定向指定的文件。
打印信息将被用邮件的形式发给指定的用户例如:
tar czvf /tmp/etc.tar.gz /etc
改为
tar czf /tmp/etc.tar.gz /etc
或者改为:
tar czvf /tmp/etc.tar.gz /etc >& /tmp/tar.log补充:>& /tmp/tar.log
表示把前面的标准输出和标准错误输出都重定向到/tmp/tar.log定义任务的脚本文件,最好统一放到某个目录,不要乱放。
比如可以放到 /server/scripts/时间变量的使用
echodate +%Y年%m月%d日%H:%M:%S
%在定时任务中,表示新的一行,new line所以时间变量中的%应该进行转义
即在%前加 \
echodate +\%Y年\%m月\%d日\%H:\%M:\%S
系统的定时任务
用户的定时任务,用来实现用户自定义的定时任务。
系统的定时任务,一般用于系统级的维护工作。
比如:写缓存数据到硬盘。
清理日志。
系统的定时任务的实现:
编辑 /etc/crontab
* 3 * * * root run-parts /tmp/test
表示每天3点,root用户执行/tmp/test/目录·下所有的脚本
ps:linux开机启动所有脚本最好放在同一目录
调试定时任务的方法
1. 增加频率
把任务的执行频率调快一点,比如每分钟1次。
如果该任务有影响,就一定要放到测试环境下测试。
- 修改系统的时间
- 在定时任务中输出调试信息
输出信息会自动发邮件给指定用户
或者把调试信息重定向指定文件
定时任务的常见错误:
1. 环境变量
在定时任务执行,系统中的大部分环境变量都不能使用
解决方案:
1)重新定义这些环境变量
UID=0
2)导入环境变量的配置文件
————————-
/bin/sh /etc/profile
........ -------------------------- 补充:/etc/profile就是系统的环境变量的定义脚本
- echo “hello” >> /tmp/a.log >/dev/null 2>&1
这个是错误的,因为:
- echo “hello” >> /tmp/a.log >/dev/null 2>&1
/tmp/a.log 和后面的 >/dev/null 2>&1 不能同时使用
定时任务的权限
指对各用户执行定时任务权限上的管理
禁止某个用户执行定时任务:
/etc/cron.deny
在该文件中,添加该用户名,即可禁止该用户执行定时任务
把该用户从/etc/crond.deny删除,即允许该用户执行定时任务
- 9.Linux的定时任务
- linux的定时任务
- linux的定时任务
- linux的定时任务
- linux定时任务的设置
- linux定时任务的设置
- linux定时任务的设置
- linux下的定时任务
- linux定时任务的设置
- linux定时任务的设置
- linux定时任务的设置
- linux定时任务的设置
- linux定时任务的设置
- linux定时任务的设置
- Linux定时任务的设置
- linux定时任务的设置
- linux下的定时任务
- Linux下的定时任务
- Lucene学习笔记之(六)lucene的中文查询
- TCP的三次握手和四次挥手详解
- 《我的第一本互联网消防书》目录
- GeekBand 第十二周笔记
- springmvc——数据类型转换
- 9.Linux的定时任务
- GCD
- Vuejs入门篇
- HDU 2896病毒侵袭 ac自动机
- zb的生日
- CSU 1115 湖南省第八届大学生计算机程序设计竞赛 (最短的名字[字典树])
- WR703N焊TTL线成功,但又遇到问题
- Html+CSS中子选择器
- 【HDU】5761 Rower Bo