Linux之定时任务补充

 

定时任务两实例

例1: 每分钟打印一次自己的名字拼音全拼到“/server/log/自己的名字命名的文件”中。

[root@chengliang log]# mkdir -p /server/log/
[root@chengliang log]# echo "chensiqi" >>/server/log/chengliang
[root@chengliang log]# crontab -l
#time sync by zcl at 2017/5/8
*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1
[root@chengliang log]# crontab -e     ==>设置定时任务,加上下面这两句
#print my name to log by zcl at 2017/5/12
*/1 * * * * /bin/echo "my name is zcl" >> /server/log/chengliang
[root@chengliang log]# 

错误示例:

#print my name to log by chensiqi at 2017211
*/1 * * * * /bin/echo "chensiqi" >>/server/log/chensiqi >dev/null 2>&1
提示:这是一个错误的定时任务,请同学们思考错在了哪里?

解答知识小结:

1、定时任务要加注释
2、如果已经要定向到文件中,结尾不要有>/dev/null 2>&1
3、/server/log目录必须要存在才能出结果,如没有创建这个目录。
4、定时任务中的路径一定要绝对路径
5、crond服务必须首先开启
6、查看定时任务日志tail /var/log/cron

 

例2:每周六,日上午9点和下午14点(执行/server/scripts/chensiqi.sh).要求:/server/scripts/chensiqi.sh脚本的功能是打印当天的日期:格式为2017-02-11可以随意。

解答:

##execute chengliang.sh by zcl at 2017/5/14
00 9,14 * * 0,6 /bin/sh /server/scripts/chengliang.sh >/dev/null 2>&1

步骤:

1、创建对应的目录

mkdir /server/scripts -p

2、命令行测试

[root@chengliang log]# date +%F
2017-05-14
[root@chengliang log]# 

3、书写脚本

[root@chengliang scripts]# echo 'date +%F' >/server/scripts/chensiqi.sh
[root@chengliang scripts]# cat chengliang.sh
date +%F
[root@chengliang scripts]# 

4、命令行测试脚本

[root@chengliang scripts]# /bin/sh /server/scripts/chengliang.sh
2017-05-14
[root@chengliang scripts]# 

5、编辑定时任务(让他快速执行* * * * *)

crontab -e
==>增加下面的定时任务
*/5 * * * * /bin/sh /server/scripts/chensiqi.sh >>/server/log/chengliang.log

6、测试

tail -f /server/log/chengliang.log
2017-5-14

7、按照原来的要求更改定时任务的时间

##execute chengliang.sh by zcl at 2017/5/14
00 9,14 * * 0,6 /bin/sh /server/scripts/chengliang.sh >/dev/null 2>&1

 

定时任务书写要领

  • 要领1:为定时任务规则加必要的注释

加必要注释写定时任务规则时尽可能的加上注释(最好是英文注释),这是个好的习惯和规范。
例如:谁在什么时间干了什么(注释内容)什么人,什么时间,因为什么,做了什么。如果这些都标记清楚了,这样其他的运维人员可以很容易的理解任务的信息,从而提升团队的工作效率。

  • 要领2:执行shell脚本任务前加/bin/sh

执行定时任务时,如果是执行脚本,请尽量在脚本前面加上/bin/sh命令,否则有可能因为忘了为脚本设定执行权限(x),从而以为OK了,结果无法完成任务,这样就“悲剧”了

  • 要领3:定时任务命令或脚本的结尾加>/dev/null 2>&1

定时任务(一般是脚本任务)规则的结尾最好加上>/dev/null 2>&1等内容,如果需要打印日志,则可以追加到指定的日志文件里(此时不要和/dev/null同时存在),尽量不要留空。如果任务是命令的话,结尾使用“>/dev/null 2>&1”时要多测试下,要有检查手段。如:*/1 * * * * echo "==" >>/tmp/chensiqi.log>/dev/null 2>&1 任务规则就是无法执行的。

  • 要领4:定时任务命令超过2条的命令执行,最好用脚本文件

超过2条的命令执行,最好用脚本文件。下面的方法就是不规范的,不专业的。

* * * * * sleep 1;echo chensiqi >> /server/log/chensiqi.log

标准写法:

[root@chensiqi /]# cat /server/scripts/log.sh
sleep1
echo chensiqi >> /server/log/chensiqi.log
  • 要领7:定时任务命令或程序最好写到脚本里执行

  • 要领8:定时任务执行的脚本要规范路径

    • 例如:/server/scripts
  • 要领9:配置定时任务规范操作过程,防止出错。

1,首先要在命令行操作成功,然后复制成功的命令到脚本里,在各个细小环节减少出错的机会。
2,然后测试脚本,测试成功后,复制脚本的规范路径到定时任务配置里,不要手敲。
3,先在测试环境下测试,然后正式环境规范部署

 

在命令行输入./chensiqi.sh(/server/scripts/chensiqi.sh)与sh chensiqi.sh区别在哪?

[root@chengliang scripts]# ls
chengliang.sh
[root@chengliang scripts]# sh chengliang.sh
2017-05-14
[root@chengliang scripts]# 
[root@chengliang scripts]# ./chengliang.sh
-bash: ./chengliang.sh: Permission denied
[root@chengliang scripts]# 

命令说明: sh chensiqi.sh表示用/bin/sh这个命令来解析并启动chensiqi.sh这个脚本。而./chensiqi.sh表示利用linux的默认解释器来解析并启动这个脚本。因此,./chensiqi.sh需要linux下x的执行权限,而sh chensiqi.sh不需要

 

定时任务不加>/dev/null 2>&1的后果

  • 如果定时任务规则结尾不加>/dev/null 2>&1等命令配置,有可能有大量输出信息,时间长了,可能由于系统未开启邮件服务而导致邮件临时目录/var/spool/clientmqueue 文件数猛增的隐患发生,大量文件会占用大量磁盘inode节点(每个文件占一个inode),以致磁盘inode满而无法写入正常数据(下文有案例)。
  • 提示:上面的>/dev/null 2>&1 写法也可以写成1>/dev/null 2>/dev/null,例:$JAVA-jar $RESIN_HOME/lib/resin.jar $ARGS stop 1>/dev/null 2>/dev/null 此写法来自resin服务默认启动脚本
  • 上述是centos5.8的情况,假如系统不安装sendmail(Centos6.4),那是不是就没有上述问题了?

 

企业案例:如果定时任务规则结尾不加>/dev/null 2>&1,很容易导致硬盘inode空间被占满,从而系统服务不正常。

当一个定时任务执行的时候,就会给系统发一封邮件。sendmail邮件服务,经常是关闭的,所以定时任务发送的邮件就会临时堆在/var/spool/clientmqueue/,时间长了,/var/spool/clientmqueue/文件数特别多。Centos5的时候一定会有这个问题。

Centos6呢?请往下看。

[root@chensiqi1 ~]# cat /etc/redhat-release 
CentOS release 6.8 (Final)
[root@chensiqi1 ~]# crontab -l 
#go to chensiqi trainning by chensiqi at 20170211
* * * * * /bin/sh /root/chensiqi.sh
[root@chensiqi1 ~]# ls /var/spool/postfix/maildrop/
D3AD0C6  DB2BAC9  E14E6D0  E5222D1
[root@chensiqi1 ~]# 

命令说明:

定时任务没定向到空,postfix服务没有开启的话,那么每执行一次定时任务,/var/spool/postfix/maildrop/文件夹下就会产生一个小文件,随着时间累计,就会越来越多,导致出现问题。 如果开启了邮件服务,就会直接给root发送邮件。

解决方法:

1、删除大量小文件/var/spool/postfix/maildrop/下所有文件(ls|xargs rm -f)
2、临时开启postfix(sendmail)服务
3、vi /etc/crontab:将‘MAILTO=root’替换成‘MAILTO=“”’然后service crond restart即可。(如果还不行,crontab -e 第一行增加MAILTO=“”)

 

亡羊补牢:

定时任务定向到空>/dev/null 2>&1

目录名解释
/var/spool/clientmqueuecentos5.xsendmail临时邮件文件目录,有很多原因会导致这个目录碎文件很多,比如crontab定时任务命令不加>/dev/null等,并且sendmail服务没开。工作中偶尔会因为该目录文件太多,导致/var所在的分区inode数量被消耗尽,无法写入文件的情况
/var/spool/postfix/maildrop/centos6.x postfix临时队列目录/var/spool/postfix/maildrop/默认定时任务执行时会给root发邮件,如果邮件服务不开,就会把邮件推到上述目录。当定时任务结尾不加>/dev/null 2>&1的时候,定时任务就会在上述目录存大量小文件

 

定时任务的系统配置文件/etc/crontab

[root@chensiqi1 ~]# cat /etc/crontab
SHELL=/bin/bash  
PATH=/sbin:/bin:/usr/sbin:/usr/bin 
MAILTO=root  
HOME=/  # For details see man 4 crontabs# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
  • SHELL=/bin/bash #shell解释器
  • PATH=/sbin:/bin:/usr/sbin:/usr/bin #PATH环境变量
  • MAILTO=root #定义如果任务有输出,发给哪个用户,默认发给root用户
  • HOME=/ #定时任务执行命令从根目录开始

root用户执行crontab -e命令实际修改的是/var/spool/cron/root的root文件

[root@chengliang scripts]# cat /var/spool/cron/root  
#time sync by zcl at 2017/5/8
*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1

  

增加执行任务频率调试任务(某些任务不能用于生产环境)

在调试时,把任务执行频率调快一点,如:每分钟,每5分钟执行一次,或者比当前时间推迟5分钟以后,看能否执行,是不是按照你想象的去执行了,如果正常没问题了,在改成需要的任务的执行时间。

强调:有些计划任务是不允许频繁执行的,例如:定时往数据库里插入数据,这样的任务就要在测试机上测试好,然后部署到正式线上,这样正式工作出问题的机会就少了。

规范的公司开发和运维人员操作流程,个人的开发配置环境-->办公室的测试环境-->idc机房的测试环境-->idc机房的正式环境。

 

参考博客: http://www.cnblogs.com/chensiqiqi/p/6389611.html

转载于:https://www.cnblogs.com/0zcl/p/6852201.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最近,我也要买书了

1.当当网给我做的一个活动,购书优惠,确实是福利了,而且筛选的书籍对我们做嵌入式都是比较有帮助的,你应该知道,做活动的时候,价格都是比较不错,不要错过了时间再想要当时的价格,有需…

复习Java异常处理_异常分类_自定义异常_线程初步了解

复习Java异常处理_异常分类_自定义异常_线程 主要内容 异常、线程 教学目标 第一章 异常 1.1 异常概念 异常,就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响.在程序中的意思就是: 异常…

python selenium自动化测试面试题_selenium 自动化测试面试题及答案

1、selenium中如何判断元素是否存在?- isElementPresent2、selenium中hidden或者是display = none的元素是否可以定位到?- 不能3、selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?…

跟我师兄聊天引发的思考

我一个师兄,上大学的时候关系很好,我师兄也很喜欢打篮球,也许这就是我们有很多共同话题的原因,人是很奇怪,特别是做技术的,本来就比较闷,很难跟陌生人马上来电,但是如果有个共同爱好…

HDU 4701 Game

link:http://acm.hdu.edu.cn/showproblem.php?pid4701 DP真美 ! (亝 ‿ 亝) dp[pos][a][b][0/1]:第pos件商品即将被购买,Alice有a元, Bob有b元,轮到谁行动(0:Alice 1:Bob)。 打训练赛时,设计出…

写好一份属于自己的简历

原文出处:原文链接 下面是精益技术简历的47条原则: 版式 原则1:使用对齐 原则2:不必使用居中 原则3:谨慎使用粗体 原则4:避免不必要的折行 原则5:使用制表符辅助对齐 个人信息 原则6&#xff…

别忘了当初你为何出发

最近,特别喜欢听一个广播,宝安905,估计是因为我最近营养不太够,需要多喝一些鸡汤,刚好这个电台广播的鸡汤非常够味,非常符合我现在的胃口。比如这一句「你想收获世界上最好的东西,先让世界看到最…

Git学习历程

Git学习历程 作为一名有理想的程序员,当然要会用一些高效的工具。今天来复习一下之前学过的Git的使用方法。 学习流程: 1、入门GitHub的文章:http://pan.baidu.com/s/1jHLdNZg(百度云盘)。这篇文章中把GitHub讲的很详细,但是在讲解…

kass中lisp文件_自动加载文件目录下的lsp、vlx和fas文件

;自动加载文件夹中的lsp,fas,vlx文件(defun loadlspfile(Folder_path / nn f1)(if Folder_path(vl-catch-all-apply(lambda ( / nn f1)(setq nn(append(xingle_GetFile Folder_path "*.lsp")(xingle_GetFile Folder_path "*.fas")(xingle_GetFile Folder_p…

写给自己的话

花一定的时间, 在某感兴趣的几个框架, 或者技术上达到一定深度, 不要浅尝辄止, 多去研究, 扩展, 理解为什么要这样做, 我应该要怎么做, 我为什么要这样做某一方向不具有深度的根本原因在于: 1. 回避问题: 总是寻求别人做好的解决方案, 这样做未尝不可, 但是也应该搞懂为什么别人…

一位跟我一样疑惑的同学~

今天遇到一个同学给我提的问题,非常像我之前的经历,想分享给大家,最近手机码字,觉得有用,给个在看或者转发,小弟感激不尽,在所不辞。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~我2012年毕业&#xff…

亚信第一天 5-15

webpack 入门教程 http://www.jianshu.com/p/4df92c335617 整体目录结构 lib - 使用nodejs laydate git .bat 安装脚本 打包 .sh page.json 整体配置 server.js 开发服务器配置 webpack-模块化划分及代码组织 使用npm自动化管理 npm的使用 - node的包管理工具 www.npmjs.com pa…

哦,瞧那,无能的悲观主义者---无能者的独唱

摘自网易云评论区 C语言中,反斜杠无法直接输出,需要在前面再加一个反斜杠标识出来才可以。如果,你是一个注定要被输出的反斜杠,那么我愿意成为那个在你之前的隐姓埋名的反斜杠。 “我所有的自负皆来自我的自卑,所有的…

长亭php反序列化防护_CTF-攻防世界-Web_php_unserialize(PHP反序列化)

题目解题过程PHP反序列化的一道题,从代码看出flage在fl4g.php这个文件里面,Demo类的构造方法可以传入文件名。把Demo的代码贴到本地做一下序列化classDemo {private $file index.php;public function __construct($file) {$this->file $file;}funct…

在深圳转户口这件小事

我对于政策这种事情是比较感冒的,比如老师说不能去外面上网,我是绝不会偷偷跑出去的,来深圳的第一年,我就想着办理户口了,第一次机会是在 TCL 的时候,人事部门有专门给我们办理转深户的,不过那时…

高程(三)笔记---- 第三章

一、有3个函数可以把非数值转换为数值:Number()、parseInt()、parseFloat() Number():可以用于任何数据类型,用法-----------Number(true) parseInt():把字符串转换为整型数值,用法---------parseInt("123") parseFloat():把字符串…

CPU 和 GPU

端午回来,发的第一篇文章,还在谋划其他事情,大家共勉。现在电脑这么普及,应该每个人都知道 CPU ,即使不懂电脑的人都能憋出大招告诉你电脑里面有一个 CPU,CPU 是中央处理器,是很多很多年积累下来…

mysqlierror php_php操作mysqli(示例代码)

php操作mysqli(示例代码)更新时间:2013年10月28日 08:56:20 作者:php操作mysqli的示例代码。需要的朋友可以过来参考下,希望对大家有所帮助define("MYSQL_OPEN_LOGS",true);class mysqliHelp{private $db;public function __cons…

React Native - 3 View, Text简介以及onPress onLongPress事件

我们要生成如下的构图 直接上图,不解释。如下图所示,定义函数,函数之间不需要逗号,在元素上添加事件,使用关键字this.{function name}转载于:https://www.cnblogs.com/yahb/p/6864382.html

创业日记

最近在拼命的写代码,估计这段时间写代码的行数等于过去一年的了,这是保守估计,如果不保守估计就不好说了,我本来想在原来的小组群里发话说,打算是下面这段对话我:X总,你站起来X总:为…