L017-linux系统定时任务crond入门小节

oh my god!how old are you?

怎么老是你?没错,我又来了,哈哈哈,今天是我的生日呢,在这么重要的日子里,必须要更一篇学习小节,OK,直奔主题!

首先呢,可以想一下,什么是程序?

其实要非常准确的答出来不是非常的好答出来的。

那么简单的说一下

答:我们使用的命令,就是程序,二进制程序。

基本特征:一堆代码,一个文件,一个命令。

程序是静态的,放在电脑里没有被运行。

程序存在于磁盘中

那么,进程又是什么呢?

简单的说把系统中的程序运行起来就是进程。

进程会存放在内存中

每个进程在启动时,系统会指定一个唯一的数字给每个进程,这个数字称为进程ID或者PID进程号

每个进程可能有两种方式存在:一个是前台,一个是后台

一般的系统网络服务都是以后台方式存在的,且都会常驻在系统中,直到关机或者主动杀死时才能停止(比如ssh远程连接服务,常称之为守护进程)

这时,crontab是时候出现了!

crond是什么?请往下慢慢看

crond是linux系统中用来定期执行命令或者指定程序任务的一种服务或者软件。

一般我们在装完C5/C6系统的时候,crond就会默认存在了。

我们优化开机自启动服务的时候,第一个就是crond。

crond默认情况(每分钟),会检查系统中是否有需要执行的定时任务,如果有,就会根据事先定义好的规则来执行这个定时任务。就好比生活中的闹钟一样。

但是需要注意的是crontab对于秒级的任务(以秒为单位定时任务)是无能为力的,如果需要可以自己尝试写守护进程(shell循环)或者使用Quartz,他可以实现秒级任务。

那么,为什么需要定时服务?

1.服务器:7*24小时开机提供服务是网站的基本特征。

2.有重要数据:1天备一次,5份以上

服务器上的数据一般最低1天备一次,每分钟(实时备份)再增量备份。

半夜备份:我们每天爬起来备份,然后睡觉,假设一次备份持续5小时。

基于这种情况,定时任务就产生了。定时任务可以实现帮助我们自动哦那个备份数据。

crond服务====闹钟(某种意义上)

linux定时任务分类:
1.系统自身的定期执行的任务
2.用户执行的任务

以下为系统管理的定时文件(可以了解一下,平时用的不多):

[root@moban logrotate.d]# ll /etc/ | grep cron*
-rw------- root root Nov anacrontab
drwxr-xr-x. root root Mar : cron.d
drwxr-xr-x. root root Mar : cron.daily
-rw------- root root Nov cron.deny
drwxr-xr-x. root root Mar : cron.hourly
drwxr-xr-x. root root Mar : cron.monthly
-rw-r--r-- root root Sep crontab
drwxr-xr-x. root root Sep cron.weekly

查看我目前机器的定时任务(后面的5行都是我自己加的):

[root@moban logrotate.d]# crontab -l
*/ * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null >&
#######*/ * * * * cat /root/.txt
#######*/ * * * * for n in `seq `;do touch $n.txt;done
#######*/ * * * * ll
* * * * * /root/oldboy.sh
*/ * * * * ntpdate time.windows.com

linux下的定时任务分类:

1)at 适合执行一次就结束的调度任务,每天晚上。了解即可。

   依赖服务:atd

[root@moban logrotate.d]# chkconfig --list atd        //因为都是用crontab,所以都装机完成后关掉
atd :off :off :off :off :off :off :off

2)anacron 适合于非7*24小时的开机的服务器准备的。开机执行的,检测停机期间没有执行的任务,在开机后一次性执行一遍。(因为工作中大多数的服务器都是7*24小时开机,所以这个定时任务的作用意义不大)

3)crond,crond服务默认情况(每分钟),会检查系统中是否有需要执行的定时任务,如果有就会根据事先定义好的规则来执行这个定时任务。

依赖的服务:crond(开机自启动)

提示:我们说的crond是一个定时任务的守护进程,而crontab是一个命令,是用户用来设置定时任务规则的命令。几乎每个服务器都会用到crond服务。

下面着重的了解一下crontab吧

crontab

参数:
-l 显示列表
-e 编辑定时任务
-r 删除,用的比较少
-i 出现确认信息

我们常用crontab -l来查看定时任务信息,那么crontab文件是存在哪里呢?

[root@moban cron]# cat /var/spool/cron/root
*/ * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null >&
#######*/ * * * * cat /root/.txt
#######*/ * * * * for n in `seq `;do touch $n.txt;done
#######*/ * * * * ll
* * * * * /root/oldboy.sh
*/ * * * * ntpdate time.windows.com

由上可以看出,其实就是在cron文件夹下,有一个用户名称的文件,每个账号的定时任务就存在对应文件里面。同理,crontab -e编辑的也就是这个文件。

下面这两个基本不用,因为本身系统权限的设置,超级用户可以给他的命令本身就给了,不给的他用循环也一样做不了。

/etc/cron.deny 该文件中所列用户不允许使用crontab命令

/etc/cron.allow 该文件中所列用户允许使用crontab命令,优先于/etc/cron.deny。

下面是定时任务的使用指定格式:

# Example of job definition:
# .---------------- minute ( - ) //分钟
# | .------------- hour ( - ) //代表小时
# | | .---------- day of month ( - ) //代表日、天
# | | | .------- month ( - ) OR jan,feb,mar,apr ... //代表月份
# | | | | .---- day of week ( - ) (Sunday= or ) OR sun,mon,tue,wed,thu,fri,sat //代表星期,星期几
# | | | | |
# * * * * * user-name command to be executed

简单点儿记就是分时日月周

*代表每的意思

这节课基本上就是这么多啦,内容其实跟前两节课一样,不多!

下面就是老师在课上出的题了。巩固练习一下。

第一部分-练习定时格式:

① , * * * /bin/sh /scripts/oldboy.sh
每天凌晨3点半和中午12点半的时刻执行/scripts/oldboy.sh脚本 ② */ * * * /bin/sh /scripts/oldboy.sh
每6小时30分执行一次/scripts/oldboy.sh脚本 ③ -/ * * * /bin/sh /scripts/oldboy.sh
在每天的8点到18点之间,每隔2小时的 半点时刻执行/scripts/oldboy.sh ④ * * * /application/apache/bin/apachectl graceful
每天晚上9点半重启apache ⑤ ,, * * /application/apache/bin/apachectl graceful
每月1日10日22日的4点45分重启apache ⑥ * * , /application/apache/bin/apachectl graceful
每周六和周日的凌晨1点10分重启apache ⑦ , - * * * /application/apache/bin/apachectl graceful
每天的18点到23点每隔30分钟重启一次apache。
提示:最后一次执行任务时23:30分 ⑧ */ * * * /application/apache/bin/apachectl graceful
每小时重启一次apache ####⑨ * ,-/ * * * /application/apache/bin/apachectl graceful
每天的23点与0-7点之间每分钟重启一次apache ⑩ * - /application/apache/bin/apachectl graceful
每年的4月份每周的周1到周3每天的11点整重启一次apache //一般周和日尽量不要同时用,否则可能达不到想要的效果

第二部分-实际练习:

.5月5日上午9点去老男孩培训上课。规则为:
* 去老男孩儿培训上课 .每周日,上午9: 去老男孩培训上课。规则为:
* * 去老男孩儿培训上课 .每分钟打印一次自己的名字拼音全拼到“/server/log/自己的名字命名的文件”中。
答:
方法一:
[root@moban log]# crontab -e
*/ * * * * echo lichaoran >> /server/log/lcr.txt 方法二:
* * * * * echo lichaoran >> /server/log/lcr.txt
.每周六和周日 上午9点和下午14点来老男孩linux培训学习(/server/scripts/oldboy.sh)。
答:
[root@moban log]# echo "date +%F" > oldboy.sh
[root@moban log]# crontab -e
, * * , /bin/sh /server/log/oldboy.sh >/dev/null >& //脚本最好是复制命令行执行过的或者把定时任务的脚本再复制到命令行一遍。而且要用绝对路径,防止出错。
执行sh前加/bin/sh //定时任务(一般是脚本任务)规则的价位最好加上 >/dev/null 2>&1 等内容,如果需要打印纸,则可以追加到指定的日志文件里(此时不要和/dev/null同时存在),尽量不要留空 //超过两行的命令,最好用脚本,而不是直接在定时任务里写上命令。(非必须) [root@moban ~]# cat /var/log/cron //所有定时任务所执行的命令日志都在这里面

最后,老师留了几道题,是课下的作业,已经做出来了,但是正确率不敢保证,先写上,下节课老师讲完了我再改错。

简答题:
1.每隔1分钟,打印一个+号到oldboy.log,请给出crontab完整命令。

*/ * * * * /bin/echo echo "+" >> /server/log/oldboy.log

2.每隔2个小时将/etc/service文件打包备份到/tmp下(最好每次备份成不同的备份包)

[root@moban ~]# tar -czvf  /tmp/$(date +%T)services.zip /etc/services //先写出程序测试是否有问题
[root@moban log]# echo "tar -czvf /server/log/$(date +%T)services.zip /etc/services" > beifen.sh //程序放到beifen.sh中
[root@moban log]# crontab -e
*/ * * * /bin/sh /server/log/beifen.sh

3.每天晚上12点,打包站点目录/var/www/html 备份到/data目录下(最好每次备份按时间生成不同的备份包)

这道题跟上题类似
[root@moban log]# tar -cvzf /root/$(date +%m-%d-%h)html.zip /var/www/html/.
[root@moban log]# echo "tar -cvzf /root/$(date +%m-%d-%h)html.zip /var/www/html/" >> /root/beifen.sh
[root@moban log]# crontab -e
* * * /bin/sh /root/beifen.sh

4.每周 六、日 上午9:00和下午14:00来老男孩儿这里学习(执行程序/server/script/oldboy.sh代替学习)

[root@moban log]# crontab -e
, * * , /bin/sh /server/script/oldboy.sh /dev/null >&

5.如果在莫用户的crontab文件中有以下记录,该行中的命令多久执行一次(RGCE考题)?()

30 4 * * 3 mycmd

A每小时。

B每周

C每年三月中每小时一次

答:这道题我选B

6.如果在某用户的crontab文件中有以下记录,该行中的命令多久执行一次(RHCE考试题)?()

*/5 * * * * mycmd

A每5分钟一次

B每小时过5分钟

C不会运行,格式无效

答:这道题我选A

最后的最后附一张神图:


2016年6月2日15:36:07

补充:

昨天最后的简答题是老师留的作业,然后呢发现错误是真是多啊,上面的很多地方都不对,现在就把标准答案,也就是我的笔记补充上吧。

1.每隔1分钟,打印一个+号到oldboy.log,请给出crontab完整命令。
昨天的解答:

*/ * * * * /bin/echo echo "+" >> /server/log/oldboy.log >/dev/null >&

问题:
a.没注释。不规范。
b.定时任务规则如果是命令,并且已经有从定向或者追加符号,一般要测试好加与不加>>/dev/null 2>&1 到控设备
c.要用绝对路径,也就是完整路径,且确保目录要存在才行,日志文件oldboy.log可以存在
d.要用>>追加,不是>覆盖,否则就算过了一天也只有一行而已。

还有一点因为前面已经有从定向了,所以后面不能加>/dev/null 2>&1了,会失效。

标绿为我做的有问题的地方

规范化答案:

#print a "+" every min by oldboy : --
*/ * * * * /bin/echo echo "+" >> /server/log/oldboy.log >/dev/null >&

2.每隔2个小时将/etc/services文件打包备份到/tmp下(最好每次备份成不同的备份包)

昨天的解答:

[root@moban ~]# tar -czvf  /tmp/$(date +%F-%H)services.zip /etc/services //先写出程序测试是否有问题
[root@moban log]# echo "tar -czvf /server/log/$(date +%F-%H)services.zip /etc/services" > beifen.sh //程序放到beifen.sh中
[root@moban log]# crontab -e
*/ * * * /bin/sh /server/log/beifen.sh

问题:
1、不要在根目录下打包。进入打包文件或目录的上级目录进行打包。
2、定时任务是按小时,打包里的日期也要精确到小时。
3、命令行操作成功是定时任务可以成功的大前提。把成功打包的命令放到文件脚本里执行。
4、tar的参数 -czvf中的v是输出,在执行脚本时不要加v。
5、规范脚本存放的目录
6、定时任务打包或者处理其他工作最好不要在屏幕输出。
7、从命令行到脚本的过程尽量复制,不用手敲。
8、测试打包的脚本是否正常。
9、命令行测试好。要用定时任务使用的完整命令测试。
10、执行脚本前面要加/bin/sh
11、* */2 * * * 的写法是每分,不是每两小时,一定要注意第一个*要变成0
12、命令放定时任务里不能有%,需要用“\”转义,所以都要放脚本里

规范化答案:

[root@moban ~]# tar -czvf  /tmp/$(date +%F-%H)services.zip /etc/services //先写出程序测试是否有问题
[root@moban log]# vi /cron/beifen.sh //程序放到beifen.sh中
cd /etc/
tar -czvf /tmp/$(date +%F-%H)services.zip ./services
//保存退出 [root@moban log]# crontab -e
*/ * * * /bin/sh /cron/beifen.sh >/dev/null >&

3.每天晚上12点,打包站点目录/var/www/html 备份到/data目录下(最好每次备份按时间生成不同的备份包)

昨天的解答:

[root@moban log]# tar -cvzf /root/$(date +%m-%d-%h)html.zip /var/www/html/.
[root@moban log]# echo "tar -cvzf /root/$(date +%m-%d-%h)html.zip /var/www/html/" >> /root/beifen.sh
[root@moban log]# crontab -e
* * * /bin/sh /root/beifen.sh

由于这个题跟上题类似,所以就直接贴出来答案:

[root@moban log]# tar -cvzf /root/$(date +%m-%d-%h)html.zip /var/www/html/

[root@moban log]# vi /cron/beifen2.sh
cd /var/www/
tar -czf /data/$(date +%m-%d-%h)html.zip ./html/ [root@moban log]# crontab -e
* * * /bin/sh /cron/beifen2.sh >/dev/null >&

第四题就不贴啦,因为没什么问题,跟老师讲的一致。OK,就这样!

L017-linux系统定时任务crond入门小节的更多相关文章

  1. linux系统定时任务crond入门

    1,Crond: Crond是linux系统中用来定期执行命令或指定程序任务的一种服务或者软件.(Centos5以后默认存在) 当优化开机自启动的时候,第一个就是crond. Crond服务默认情况( ...

  2. Linux系统定时任务crond那些事

    1 Linux系统定时任务 1.1 定时任务介绍 1.1.1 Crond是什么? Crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件.Centos5/ linux系统安装完操作 ...

  3. Linux之定时任务Crond使用

    Linux之定时任务Crond使用 一.用法 crond服务是linux系统自带的服务,是不需要手动安装的: crond服务是一种守护进程: Linux中的用户使用contab命令来配置corn任务: ...

  4. Linux学习之九-Linux系统定时任务

    Linux系统定时任务 在一些实际工作中需要机器在某个时间自动执行某个任务,不需要人为在此时刻参与,可以建立一个定时任务. crond 服务是linux下用来周期性的执行某种任务或等待处理某些事件的一 ...

  5. Linux 系统定时任务:crontab,anacron

    Linux 系统定时任务:crontab,anacron 一.Cron 服务 1. 启动服务 service cron start 2. 关闭服务 service cron stop 3. 重启服务 ...

  6. Linux FC/iSCSI存储设备管理系列(一):Linux系统设备驱动入门

    Linux FC/iSCSI存储设备管理系列(一):Linux系统设备驱动入门 转载请在文首保留原文出处:EMC中文支持论坛 - https://community.emc.com/go/chines ...

  7. Linux:定时任务crond服务

    一.crond简介 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动cro ...

  8. Linux之定时任务crond

    定时任务说明与分类 定时任务的应用场景举例 每天晚上 12点备份/etc/目录 tar 定时任务的三种分类 crond(crontab)定时任务软件(软件包cronie),用的最多的一种 atd,应用 ...

  9. Linux之定时任务Crond介绍

    Linux之定时任务 定时任务Crond介绍 Crond是linux系统中用来定期执行命令/脚本或指定程序任务的一种服务或软件,一般情况下,我们安装完Centos5/6 linux操作系统之后,默认便 ...

随机推荐

  1. UI第二组与数据库对接时遇到的问题记录

    此为组内某一位做UI的同学的随笔. 之前的app由于没有加入数据库,所以每次重新启动里面的东西都会回到初始状态,即不能保存内容.我们的数据库小组已经很棒地基本完成了数据库的工作,于是我就准备加入数据库 ...

  2. Knockout学习,添加模板,事件,Mouseover,mouseout

    <div class="rtitle">我的收藏</div> <div class="list_ul" data-bind=&qu ...

  3. kafka入门2:java 创建及删除 topic

    1.pom <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.1 ...

  4. sql server 存储过程的学习

    存储过程学习笔记 存储过程就是一条或者多条sql语句的集合,为了实现特定任务,而将一些需要多次调用的固定操作语句编写成程序段,这些程序段存储在服务器上,有数据库服务器通过程序来调用.T_SQL:存储过 ...

  5. 个人犯的一个golang routine错误

    这个其实不是错误,2个写法没有区别.-2015.11.22 认识golang也不少时间了,也做过几个项目.最近发现之前用golang写的一个服务,内存涨得比较快,一直没找出来原因来.今天把疑惑发到群里 ...

  6. 通过C/C++基于http下载文件

    简介 Windows系统如何通过C/C++下载互联网上的文件呢?这里笔者给大家演示一个最简单的方法,利用Windows提供的urlmon库,可以快速实现文件下载的简单实例. 注:本文内容部分参考了&l ...

  7. docker tomcat jvm 使用 visualVM监控

    1.  建立基础镜像 FROM centos MAINTAINER fengjian <fengjian@senyint.com> ENV TZ "Asia/Shanghai&q ...

  8. Publisher和Subscriber节点

    一.Publisher节点 /*"ros/ros.h"里面包含了ROS系统内最常用的一些头文件,包含此文件,便可以使用ROS的核心功能.*/#include "ros/r ...

  9. 动态代理实现设置tomcat请求编码

    1)htmlcode: <html> <head> <title>$Title$</title> </head> <body> ...

  10. Windows/Linux获取当前运行程序的绝对路径

    windows 获取当前运行程序的绝对路径(.exe) GetModuleFileNameA()函数获取绝对路径,不过文件路径中的反斜杠需要进行替换. ]; GetModuleFileNameA(NU ...