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-------   1 root root    541 Nov 23  2013 anacrontab
drwxr-xr-x.  2 root root   4096 Mar 23 11:12 cron.d
drwxr-xr-x.  2 root root   4096 Mar 17 14:41 cron.daily
-rw-------   1 root root      0 Nov 23  2013 cron.deny
drwxr-xr-x.  2 root root   4096 Mar 17 14:41 cron.hourly
drwxr-xr-x.  2 root root   4096 Mar 17 14:41 cron.monthly
-rw-r--r--   1 root root    457 Sep 27  2011 crontab
drwxr-xr-x.  2 root root   4096 Sep 27  2011 cron.weekly

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

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

linux下的定时任务分类:

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

   依赖服务:atd

[root@moban logrotate.d]# chkconfig --list atd        //因为都是用crontab,所以都装机完成后关掉
atd             0:off   1:off   2:off   3:off   4:off   5:off   6: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
*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1
#######*/1 * * * *  cat /root/123.txt
#######*/1 * * * * for n in `seq 5`;do touch $n.txt;done
#######*/1 * * * * ll
*30 *9 * * *0 /root/oldboy.sh
*/5 * * * * ntpdate time.windows.com

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

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

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

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

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

# 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

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

*代表每的意思

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

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

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

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

第二部分-实际练习:

1.5月5日上午9点去老男孩培训上课。规则为:
00 9 5 5 * 去老男孩儿培训上课2.每周日,上午9:30 去老男孩培训上课。规则为:
30 9 * * 0 去老男孩儿培训上课3.每分钟打印一次自己的名字拼音全拼到“/server/log/自己的名字命名的文件”中。
答:
方法一:
[root@moban log]# crontab -e
*/1 * * * * echo lichaoran >> /server/log/lcr.txt方法二:
* * * * * echo lichaoran >> /server/log/lcr.txt

4.每周六和周日 上午9点和下午14点来老男孩linux培训学习(/server/scripts/oldboy.sh)。
答:
[root@moban log]# echo "date +%F" > oldboy.sh
[root@moban log]# crontab -e
0 9,14 * * 6,7 /bin/sh /server/log/oldboy.sh  >/dev/null 2>&1  //脚本最好是复制命令行执行过的或者把定时任务的脚本再复制到命令行一遍。而且要用绝对路径,防止出错。
执行sh前加/bin/sh//定时任务(一般是脚本任务)规则的价位最好加上  >/dev/null 2>&1 等内容,如果需要打印纸,则可以追加到指定的日志文件里(此时不要和/dev/null同时存在),尽量不要留空//超过两行的命令,最好用脚本,而不是直接在定时任务里写上命令。(非必须)

[root@moban ~]# cat /var/log/cron    //所有定时任务所执行的命令日志都在这里面

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

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

*/1 * * * * /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
0 */2 * * * /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
0 0 * * * /bin/sh /root/beifen.sh

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

[root@moban log]# crontab -e
0 9,14 * * 6,7 /bin/sh /server/script/oldboy.sh /dev/null 2>&1

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完整命令。
昨天的解答:

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

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

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

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

规范化答案:

#print a "+" every min by oldboy 13:20 2016-06-02
*/1 * * * * /bin/echo echo "+" >> /server/log/oldboy.log >/dev/null 2>&1

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
0 */2 * * * /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
0 */2 * * * /bin/sh /cron/beifen.sh >/dev/null 2>&1

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
0 0 * * * /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
0 0 * * * /bin/sh /cron/beifen2.sh >/dev/null 2>&1

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

转载于:https://www.cnblogs.com/lcrbg/p/5549777.html

L017-linux系统定时任务crond入门小节相关推荐

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

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

  2. Linux基础系列(六)Linux系统定时任务Crond

    Linux系统定时任务Crond Crond是什么 Crond是Linux系统中用来定期执行命令或指定程序任务的一种服务或软件. 特殊需求:(秒级别)crond服务就无法搞定,一般工作中邪脚本守护进程 ...

  3. Linux系统定时任务Crond

    Linux系统定时任务Crond Crond是什么 Crond是Linux系统中用来定期执行命令或指定程序任务的一种服务或软件. 特殊需求:(秒级别)crond服务就无法搞定,一般工作中邪脚本守护进程 ...

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

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

  5. (四)Linux系统定时任务及延迟任务

    目录 ###1.系统延时任务### ###2.at任务黑白名单### #at任务的黑名单 #at任务的白名单 ###3.系统定时任务### 1)系统级别的cron(文件方式设定定时任务) 2)cron ...

  6. linux 脚本停止自身,Linux系统定时任务时shell脚本停止执行如何解决?

    Linux系统在进行定时任务的时候,shell脚本突然停止执行了,很多用户不明所以,是什么导致shell不执行了呢?其实原因很简单,下面小编就给大家介绍下Linux定时任务shell脚本停止执行的解决 ...

  7. Linux的crond的配置流程,Linux之定时任务Crond详解

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

  8. Linux 之 定时任务 crond

    欢迎大家扫码关注我的微信公众号: Linux 之 定时任务调度 一.概念 二.分类 三.相关命令 四. 一个例子 五. 关于占位符的说明 六.一个案例 6.1 需求 6.2 步骤 6.2.1 编写一个 ...

  9. linux crond进程多,Linux之定时任务Crond详解

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

最新文章

  1. SpringBoot注解大全 转
  2. 第一课--EFM32GG11系列--点亮LED灯
  3. 如何在Ubuntu中用apt命令删除/卸载软件包(remove/clean/purge)
  4. PreparedStatement 防止 SQL 注入原理
  5. shapefile文件格式转inp文件格式
  6. linux下音乐转换软件下载,Ubuntu 下把Ape格式音乐转为Mp3格式
  7. 前端method常见请求方式
  8. 数量遗传学 第二章 群体的遗传组成
  9. RabbitMQ优化消息阻塞系列(一)解决方案梳理
  10. learning java AWT Pannel
  11. 杨建荣的学习笔记排行榜(r2笔记100天)
  12. 武大计算机系雷军,马化腾739分、雷军700分系湖北状元!大佬们的高考成绩让人敬畏!...
  13. win10计算机跑分,Win11对比Win10系统性能测试,看完跑分结果还等发布会吗?
  14. PTA寒假基础题训练(含解题思路)(下)
  15. JavaSE_笔试题_判断题1
  16. cdn perl_菜鸟教程perl总结
  17. python123查找指定字符输入m_python基础--2 字符串
  18. early_stopping
  19. Android向服务器传递参数方式:PostGet
  20. 批量删除PPT第一页最后页——VBS脚本,在office宏中运行即可

热门文章

  1. 基于51单片机的数字电容容值测量仪proteus仿真原理图PCB
  2. 安卓JAVA调用解析青云客聊天API示例
  3. 干货:Web测试检查清单
  4. 淘宝卖家如何通过宝贝详情页装修提高店铺转化?
  5. 18年程序员生涯,读了200多本编程书,挑出一些精华分享给大家
  6. 期货反向跟单--脚踏两只船与时间管理
  7. C++ 并发指南< future >(3)std::future std::shared_future
  8. [美文欣赏] 春风沉醉的晚上
  9. 出生年,(好用详解)我出生于1988年,直到25岁才遇到4个数字都不相同的年份。也就是说直到2013年才达到“4个数字都不相同”的要求
  10. 【Solr】之使用springboot完成对【京东搜索商品】案例的实现