Linux课程笔记 Crond介绍

1. 定时任务比较及cron语法

Linux的任务调度可以分为两类:

  1. 系统自身执行的任务
  2. 用户执行的工作

 

Linux系统下另外两种定时任务软件:

at:适合仅执行一次的调度任务,需要启动一个名为atd的服务

 

anacron:这个命令主要用于非7*24小时开机的服务器,anacron并不能指定具体时间执行任务,而是以天为周期或者在系统每次开机后需要执行的任务,它会检测停机期间应该进行,但是并没有进行的crontab任务工作,执行一遍。

 

这两种比较少用

 

指令语法:

Crontab  [-u user] file

Crontab  [-u user] {-l |-r |-e}

 

指令说明:

通过crontab我们可以在固定的间隔时间执行指定的系统指令或shell脚本,时间间隔可以是分钟、小时、日、月、周及以上的任意组合(日和周不要组合)。

 

2. 使用者权限文件

文件

说明

/etc/cron.deny

该文件所列用户不允许使用crontab命令

/etc/cron.allow

该文件所列用户允许使用crontab命令

/var/spool/cron

所有用户crontab文件存放的目录,以用户名命名

 

3. 指令选项说明含义表

参数名称

含义

指定示例

-l(字母)

显示用户crontab文件内容,

crontab  -l

-e

进入vi编辑用户crontab文件

crontab  -e

-i

删除用户crontab文件前确认提示

crontab  -i

-r

从crontab目录中删除用户crontab文件

crontab  -r

-u user

指定使用者

crontab  –u qinbf –l

 

4. 指令的使用格式

      默认情况下,用户所见建立的crontab文件存放于/var/spool/cron文件中,其crontab对应的文件名与用户名一致。

      格式共分为七段,前五段为时间设定段,第六段以哪个用户执行crontab(默认是当前用户),第七段为所要执行的命令段。

 

5. Crontab时间段的含义如表:

含义

取值范围

第一段

分钟

00-59

第二段

小时

00-23

第三段

日期

01-31

第四段

月份

01-12

第五段

星期几

0-6

 

6. 特殊符号含义如下:

特殊符号

含义

*

表示任意时间都

-

减号,表示分隔符,表示一个时间范围段

逗号,表示分隔时间段的意思

/n

n代表数字,“即每隔n单位时间”

 

7. crontab依赖的服务:

chkconfig   --list |grep  crond

 

/etc/init.d/crond  status

 

8. crontab实例说明

1) 30  3,12  *  *  * /bin/sh /scripts/oldboy.sh

2) 30  */6  *  *  * /bin/sh /scripts/oldboy.sh  #--à第二列*/6表示每6个小时,也相当于6,12,18,24

3)30  8-18/2  *  *  * /bin/sh /scripts/oldboy.sh #-à第二列8-18/2代表早晨8点到下午18点之间每2小时,也相当于8,10,12,14,16,18

4)*  23-7/1  *  *  *  /application/apachectl restart   #----à实际上的效果是,晚上到早上的7点,每小时的每一分钟都重启apache,如果是想达到每小时才重启的话,前面的分钟段,可以设置为0或者30之类的

5)服务器时间同步:系统每5分钟同步一次时间

[root@test2 ~]# crontab -l

*/5 * * * * /sbin/ntpdate time.windows.com  >/dev/dull 2&>1

 

9. crontab命令生产环境专业写法

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

答案:

#print char task by oldboy for programmer A at 2010-12-12

*/1  *  *  *  *  echo  “oldboy” >>/server/log/oldboy.log 2>&1

 

例2:每周六、日上午9:00和下午14:00来老男孩linux运维实战培训中心学习(/server/script/oldboy.sh)

答案:

#cron  job for ett by oldboy 2010-12-12

00       09,14  *  *  6,0  /bin/sh /server/script/oldboy.sh >/dev/null 2>&1

针对以上两生产例子说明:

1写定时任务要写清注释是个好习惯,比如什么人,什么时间,因为谁,做了什么事

2执行任务时可以省略用户,在执行脚本时,尽量带上/bin/sh,否则有可能因为脚本没有执行权限而无法执行

3需要root权限执行的任务可以登录到root用户下然后设置,如果不需要root权限,可以登录到普通用户下,然后设置,这里要注意不同用户的环境变量问题。

4定时任务命令的结尾最好加上>/dev/null 2>&1等内容,如果需要打印日志,可以追加到指定日志,不推荐留这种不专业的做法

如果定时任务不加>/dev/null 2>&1等命令设置,时间长了,可能会导致邮件临时目录/var/spool/clientmqueue文件数猛增,占用大量磁盘空间inode节点。

5在开发定时任务程序或脚本时,在调试好脚本程序后,应尽量把DEBUG及屏幕输出的内容命令去掉,如果还需要,可定向到日志里。

 

10. crontab生产解决案例

案例1:No  space  left  on  device故障1

在设置crontab时,提示No  space  left  on device。用df –k检查还有空间,用df –i显示/var已占用100%,如果inode耗尽,则系统上下将不能创建文件。

在/var/spool/clientmqueue/下有超多的文件ls半天没反应,用rm  -fr  *会自动跳出root,然后用xargs来配合解决。cd  /var/spool/clientmqueue&& ls |xargs rm –f

最后清理了该目录的内容。当然,如果文件数超多,执行ls |xargs rm –f也会长时间无反应,此时也可以直接cd /var/spool/&&rm –rf clientmqueue,然后mkdir clientmqueque && chmod 770 clientmqueue &&chown smmsp,smmsp  -R /var/spool/clientmqueue。

原因分析:系统中,cron执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动所以就会产生这些文件。

解决办法:开启邮件服务,并将crontab里面的命令后面加上>/dev/null 2>&1,在做定时脚本时,把屏幕输出定向到日志中。

 

案例2:No space left on device故障2

(1) when you create a new directory of file,system will say :No space left on device

[ett@linux /var]#mkdir ett

Mkdir:cannot create directory ett’:No space left on device

 

(2) when create crontab for account ett,you will receive error information as follows;

Crotab:installing new crontab

Cron/tmp.6655:No space left on device

Crontab:edits left in /tmp/crontab.6655

解决过程

1检查分区使用率,df  -h

2检查/var/lock下的文件,删除/var/lock/subsys/nfx,touch /var/ett,成功创建文件,删除/var/ett

3发现删除/var/lock下的任意一个文件后,都可以成功创建一个文件,再创建就会失败。

4将检查扩大到/var/下的其他目录

5怀疑分区/var/de inode用尽导致上述问题,检查inode使用率

6分区/var/没有配置quota

7发现/var/spool/clientmqueue下面有太多的文件,由于系统的邮件服务配置有问题,导致系统发出的邮件堆积在队列目录中,占用大量的inode节点。

 

处理方法:确认/var/spool/clientmqueue下的文件已经无用,删除之,如果文件数量太大,无法使用rm -f * 直接删除,可以选择ls |xargs rm -f 或者直接删除上级目录,然后重建该目录,并赋予正确的属主和权限。

 

最好的解决办法是重新设置系统邮件,使其能正常发送或找到发邮件的源头,如本文的crontab任务。

 

结论:分区/var/的 inode全部用尽,free inode为0,导致无法创建新的文件或目录,以后遇到类似的问题要注意用df  -li检查inode的使用情况。

 

11. 生产场景如何调试crontab定时任务

 

  1. 在调试时,把任务执行频率调大一点,如:每分钟、每5分钟执行一次;
  2. 用正确的执行任务时间,设置完成后,可以修改下系统当前时间;
  3. 在脚本中加入日志输出,然后把输出打印到指定的日志中,然后观察日志内容,看是否执行正确;
  4. 注意:*/1  *  *  *  *  echo “==” >> /tmp/oldboy.log  >/dev/null  2>&1这种隐蔽的无法正确执行的任务配置;
  5. 执行脚本中>>或者>后的文件名要加上绝对路径。
  6. 注意环境变量导致的定时任务故障,比如运行java程序的时候,环境变量要在脚本中重新export一下。
  1. 通过定时任务日志查看调试定时任务

 

12. 定时任务生产问题8条箴言

 

  1. 环境变量问题,典型的是如java程序运行案例
  2. 任务路径问题,脚本要用绝对路径
  3. 脚本权限问题,最好带上/bin/bash,防止忘了为脚本赋予执行的权限带来问题
  4. 时间变量问题,%号在crontab中被认为是newline,需要用\转义,crontab中有“date +%Y%m%d”,必须替换为“date +\%Y\%m\%d”,但写在脚本中就不需要了,这也是老师推荐用脚本文件的原因之一。
  5. >/dev/null 2>&1问题
  6. 定时任务加注释
  7. 使用脚本程序代替命令
  8. 避免不必要的程序输出

  

 13. 定时清理垃圾文件

  

crontab  -l |tail -2

#del clientmqueue  files  by oldboy at 2010-09-26

00 00  *  *  0 /bin/bash  /server/scripts/del_sys_file.sh > /dev/null  2>&1

 

cat /server/scripts/del_sys_file.sh

find /var/spool/clientmqueue/  -type  f | xargs  rm  -f

 

14. crond章节重点

1) 用户使用crontab  -e自定义定时任务项目,分为六段,[分、时、日、月、周、指令]。

2) 系统的/etc/crontab定时任务项目分为7段,[分、时、日、月、周、用户、指令]。

3) crontab定时任务的5个生产基本要领和7点调试技巧,尤其是学会看服务日志来调试

4) 生产环境使用crontab定时任务要注意的8点箴言

5) 重视生产的案例及通过案例为载体来学习巩固技术知识

转载于:https://www.cnblogs.com/fengze/p/6752488.html

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

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

相关文章

Python 学习日记第二篇 -- 列表,元组

一、列表 列表是一个可以包含所以数据类型的对象的位置有序集合,它是可以改变的。 1、列表的序列操作(Python3) 123456789101112131415161718192021222324>>> one_list [1,2,3,4]>>> two_list ["jonny","…

【Gamma】PhyLab 测试报告

PhyLab Gamma测试报告 测试中发现的bug Gamma阶段新Bug Bug可能原因部分错误码设置与原先抛异常的逻辑冲突原先代码中使用了一些特殊的办法处理异常Beta未发现Bug Bug可能原因控制台新建实验编号不能以0开头后端处理编号会将其前导0去除,以数字形式存储,…

如何使用Node.js,Express和MongoDB设置GraphQL服务器

by Leonardo Maldonado莱昂纳多马尔多纳多(Leonardo Maldonado) 如何使用Node.js,Express和MongoDB设置GraphQL服务器 (How to set up a GraphQL Server using Node.js, Express & MongoDB) 从GraphQL和MongoDB开始的最直接的方法。 (The most straightforward…

leetcode954. 二倍数对数组(treemap)

给定一个长度为偶数的整数数组 A&#xff0c;只有对 A 进行重组后可以满足 “对于每个 0 < i < len(A) / 2&#xff0c;都有 A[2 * i 1] 2 * A[2 * i]” 时&#xff0c;返回 true&#xff1b;否则&#xff0c;返回 false。 示例 1&#xff1a; 输入&#xff1a;[3,1,…

linux文件内容打印成二进制,如何在二进制文件中只打印可打印字符(相当于Linux下的字符串)?...

在Python3中&#xff0c;以二进制模式打开文件会得到bytes的结果。迭代一个bytes对象可以得到0到255(包括0到255)的整数&#xff0c;而不是字符。从^{} documentation&#xff1a;While bytes literals and representations are based on ASCII text, bytes objects actually b…

1098 均分纸牌

1098 均分纸牌 2002年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description有 N 堆纸牌&#xff0c;编号分别为 1&#xff0c;2&#xff0c;…, N。每堆上有若干张&#xff0c;但纸牌总数必为 N 的倍数。可以在任一堆上取若于张纸…

轻松学习分布式|系列3|分布式数据库。

我们继续来讲分布式&#xff0c;回到我们的创业游戏。 我们的业务规模上来了&#xff0c;客户也越来越忠诚了。很多客户都通过我们的订票服务&#xff0c;来方便自己的行程。 那对这些老客户&#xff0c;我们的宗旨是&#xff1a;要不断超越客户的期待。 所以&#xff0c;我们要…

量子运算 简单通俗例子_什么是量子计算机? 用一个简单的例子解释。

量子运算 简单通俗例子by YK Sugi由YK Sugi 什么是量子计算机&#xff1f; 用一个简单的例子解释。 (What is a quantum computer? Explained with a simple example.) Hi everyone!嗨&#xff0c;大家好&#xff01; The other day, I visited D-Wave Systems in Vancouver…

linux增加端口失败,端口没被占用,怎么会bind失败呢?

今天在一个服务器上部署一个webserver的时候&#xff0c;提示我bind端口失败&#xff0c;我习惯性的用netstat看了下&#xff0c;没有被占用啊&#xff01;把问题分享出来后&#xff0c;给力的同事们搜索到了ip_local_port_range这个东西这个东西对应的是/proc/sys/net/ipv4/ip…

leetcode面试题 17.15. 最长单词

给定一组单词words&#xff0c;编写一个程序&#xff0c;找出其中的最长单词&#xff0c;且该单词由这组单词中的其他单词组合而成。若有多个长度相同的结果&#xff0c;返回其中字典序最小的一项&#xff0c;若没有符合要求的单词则返回空字符串。 示例&#xff1a; 输入&am…

Restful API 设计

1. 简介 目前 "互联网软件"从用客户端/服务端模式&#xff0c;建立在分布式体系上&#xff0c;通过互联网通讯&#xff0c;具有高延时、高开发等特点。但是软件开发和网络是两个不同的领域&#xff0c;交集很少。要使得两个融合&#xff0c;就要考虑如何在互联网环境…

sql行数少于10_如何用少于100行的代码创建生成艺术

sql行数少于10by Eric Davidson埃里克戴维森(Eric Davidson) 如何用少于100行的代码创建生成艺术 (How to Create Generative Art In Less Than 100 Lines Of Code) Generative art, like any programming topic, can be intimidating if you’ve never tried it before. I’v…

安装输入发

直接在系统 ——系统管理 ——语言支持 选——中文从新启动 sudo apt-get install scim-pinyin安装JAVA环境支持 sudo apt-get install sun-java-jre()要是 apt -get 命令不能用 可能是你 的 源有问题 可以 更新一下 在系统 &#xff0d;系统管理 源设置 选这台湾的 就可以 …

(第2篇)一篇文章教你轻松安装hadoop

摘要: 这篇文章将会手把手教你安装hadoop&#xff0c;只要你细心按照文章中的步骤操作&#xff0c;hadoop肯定能正确安装&#xff0c;绝对不会让你崩溃 博主福利 给大家赠送一套hadoop视频课程 授课老师是百度 hadoop 核心架构师 内容包括hadoop入门、hadoop生态架构以及大型ha…

linux cpio到指定目录,linux cpio命令存取归档包中的文件

功能描述使用cpio命令可以通过重定向的方式将文件进行打包备份及还原恢复&#xff0c;它可以解压缩以“.cpio”或者“.tar”结尾的文件。命令语 法cpio [选项] [目标目录]选项含义选项含义-o执行 copy-out 模式&#xff0c;建立备份档。-i执行 copy-in 模式&#xff0c;还原备份…

leetcode剑指 Offer 20. 表示数值的字符串

请实现一个函数用来判断字符串是否表示数值&#xff08;包括整数和小数&#xff09;。例如&#xff0c;字符串"100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示数值&#xff0c;但"12e”、“1a3.14”、“1.2.3”、"…

python接口自动化2-发送post请求

前言 发送post的请求参考例子很简单&#xff0c;实际遇到的情况却是很复杂的&#xff0c;首先第一个post请求肯定是登录了&#xff0c;但登录是最难处理的。登录问题解决了&#xff0c;后面都简单了。 一、查看官方文档 1.学习一个新的模块&#xff0c;其实不用去百度什么的&am…

简介浏览器内核与JavaScript引擎

本文介绍了常用浏览器内核与JavaScript引擎 一、浏览器内核 Rending Engine, 顾名思义&#xff0c;称之为渲染网页内容的&#xff0c;将网页的代码转换为你看得见的页面&#xff0c;因为是排版&#xff0c;所以排版&#xff0c;所以肯定会有排版错误等问题。为什么会有排版错误…

Linux查看tar实用程序,linux tar指令常用选项

linux的tar指令经常被用到&#xff0c;因为压缩文件的时候通常需要打包文档&#xff0c;而tar指令就是打包指令&#xff0c;同时gzip压缩程序和bzip2压缩程序都是支持tar指令的&#xff0c;所以tar指令在打包的同时还可以用gzip和bzip进行压缩&#xff0c;这样多文件可以打包的…

代码字体mono_如何构建代码存储库:Multi,Mono或Organic?

代码字体monoby Chetan Sharma由Chetan Sharma 如何构建代码存储库&#xff1a;Multi&#xff0c;Mono或Organic&#xff1f; (How to Structure Code Repositories: Multi, Mono, or Organic?) The newest debate in town is whether you should keep your services in a si…