定时任务说明与分类

定时任务的应用场景举例

每天晚上 12点备份/etc/目录

tar

定时任务的三种分类

crond(crontab)定时任务软件(软件包cronie),用的最多的一种

atd,应用在只运行一次的任务

anacron ,非7*24小时运行的服务器(比如开机多长时间运行,关机多长时间运行)

  1. [root@Dao ~]# rpm -qa cronie 查看安装的cronie软件版本
  2. cronie-1.4.4-16.el6_8.2.x86_64
  3. [root@Dao ~]# rpm -ql cronie 查看软件包详细列表
  4. /etc/cron.d
  5. /etc/cron.d/0hourly
  6. /etc/cron.deny
  7. /etc/pam.d/crond
  8. /etc/rc.d/init.d/crond # crond定时软件
  9. /etc/sysconfig/crond
  10. /usr/bin/crontab
  11. /usr/sbin/crond
  12. /usr/share/doc/cronie-1.4.4
  13. /usr/share/doc/cronie-1.4.4/AUTHORS
  14. /usr/share/doc/cronie-1.4.4/COPYING
  15. /usr/share/doc/cronie-1.4.4/ChangeLog
  16. /usr/share/doc/cronie-1.4.4/INSTALL
  17. /usr/share/doc/cronie-1.4.4/README
  18. /usr/share/man/man1/crontab.1.gz
  19. /usr/share/man/man5/crontab.5.gz
  20. /usr/share/man/man8/cron.8.gz
  21. /usr/share/man/man8/crond.8.gz
  22. /var/spool/cron

用户与系统定时任务

系统定时任务

系统定时任务主要和四个文件有关(cron.daily、cron.hourly、cron.monthly、cron.weekly)

系统会定时自动运行文件里面的内容

  1. [root@Dao ~]# ls -l /etc/ |grep cron.
  2. -rw------- 1 root root 541 Aug 24 2016 anacrontab
  3. drwxr-xr-x. 2 root root 4096 Jan 24 21:32 cron.d
  4. drwxr-xr-x. 2 root root 4096 Sep 27 2011 cron.daily # 每天
  5. -rw------- 1 root root 0 Aug 24 2016 cron.deny
  6. drwxr-xr-x. 2 root root 4096 Jan 24 21:32 cron.hourly # 每小时
  7. drwxr-xr-x 2 root root 4096 Sep 27 2011 cron.monthly # 每月
  8. -rw-r--r-- 1 root root 457 Sep 27 2011 crontab # 系统定时任务的配置文件之一
  9. drwxr-xr-x 2 root root 4096 Sep 27 2011 cron.weekly # 每周
  10.  
  11. #有些病毒会在文件中插入定时任务,自动运行,所以很难彻底清除

系统定时任务相关:系统定时任务+logrotate命令 完成对 日志的日志切割、日志轮询

  1. 定时对这几个文件进行切割
    /var/log/cron
  2. /var/log/secure
  3. /var/log/messages

查看日志目录下的日志文件

  1. [root@Dao ~]# ls -l /var/log/secure* /var/log/messages*
  2. -rw------- 1 root root 1498 Jan 24 21:32 /var/log/messages
  3. -rw------- 1 root root 438 Dec 12 12:27 /var/log/messages-20181216
  4. -rw------- 1 root root 141 Dec 16 03:29 /var/log/messages-20181223
  5. -rw------- 1 root root 141 Dec 23 03:14 /var/log/messages-20181230
  6. -rw------- 1 root root 206 Jan 3 12:40 /var/log/messages-20190106
  7. -rw------- 1 root root 45504 Jan 29 21:13 /var/log/secure
  8. -rw------- 1 root root 40715 Dec 16 01:10 /var/log/secure-20181216
  9. -rw------- 1 root root 49052 Dec 23 02:34 /var/log/secure-20181223
  10. -rw------- 1 root root 22145 Dec 30 03:08 /var/log/secure-20181230
  11. -rw------- 1 root root 33336 Jan 5 23:38 /var/log/secure-20190106

logrotate里面的内容

  1. [root@Dao ~]# cat /etc/cron.daily/logrotate
  2. #!/bin/sh
  3.  
  4. /usr/sbin/logrotate /etc/logrotate.conf
  5. EXITVALUE=$?
  6. if [ $EXITVALUE != 0 ]; then
  7. /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
  8. fi
  9. exit 0
  10. [root@Dao ~]# cat /etc/logrotate.d/syslog
  11. /var/log/cron
  12. /var/log/maillog
  13. /var/log/messages
  14. /var/log/secure
  15. /var/log/spooler
  16. {
  17. sharedscripts
  18. postrotate
  19. /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
  20. endscript
  21. }

用户的定时任务

使用的几个命令

  1. crontab -l (list) #查看用户的定时任务(列表)cron table
  2. crontab -e edit #编辑用户的定时任务
  3. /var/spool/cron/root #(root是用户名 root用户的定时任务)用户定时任务存放的目录

第一次用的时候回提示

  1. [root@Dao ~]# crontab -l
  2. no crontab for root #用户没有定时任务

注:Linux中,每个用户的定时任务是分开的

在定时任务中添加项目

  1. [root@Dao ~]# crontab -e 编辑定时任务
  2. # 和vim的操作是一样的,我写入了# pizza然后保存退出
  3. no crontab for root - using an empty one
  4. crontab: installing new crontab
  5. [root@Dao ~]# crontab -l
  6. # pizza

定时任务的使用

在使用之前,一定要确保定时任务依赖的软件(服务)是否可以使用

  1. # 查看定时任务是否在运行
  2. # 第一种方法
  3. [root@Dao ~]# /etc/init.d/crond status
  4. crond is stopped
  5. # 第二种方法
  6. [root@Dao ~]# ps -ef |grep crond
  7. root 17714 17688 0 22:01 pts/0 00:00:00 grep crond
  8. # 查看定时任务,是不是开机自启动,要保证重启后也在运行
  9. [root@Dao ~]# chkconfig |grep crond
  10. crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
  11. # 3 位置是on就是开机自启动了

定时任务的开启和关闭

  1. [root@Dao ~]# /etc/init.d/crond start
  2. Starting crond: [ OK ]
  3. [root@Dao ~]# /etc/init.d/crond status
  4. crond (pid 17733) is running...
  5. [root@Dao ~]# /etc/init.d/crond stop
  6. Stopping crond: [ OK ]
  7. [root@Dao ~]# /etc/init.d/crond status
  8. crond is stopped

定时任务的开机启动关闭和开启

  1. [root@Dao ~]# chkconfig crond off
  2. [root@Dao ~]# chkconfig |grep crond
  3. crond 0:off 1:off 2:off 3:off 4:off 5:off 6:off
  4. [root@Dao ~]# chkconfig crond on
  5. crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off

如何用crontab?

  1. [root@Dao ~]# crontab --help
  2. crontab: invalid option -- '-'
  3. crontab: usage error: unrecognized option
  4. usage: crontab [-u user] file
  5. crontab [-u user] [ -e | -l | -r ]
  6. (default operation is replace, per 1003.2)
  7. -e (edit user's crontab) #查看列表 就相当于在查看/var/spool/cron/root
  8. -l (list user's crontab) #编辑 就相当于在编辑 /var/spool/cron/root
  9. -r (delete user's crontab) #把当前都删掉,无提示,直接删
  10. -i (prompt before deleting user's crontab) #删除之前提示
  11. -s (selinux context)

为什么使用crontab命令,而不是直接操作/var/spool/cron/root这个文件呢?

  1. 1、命令有语法检查功能,
  2. 2、更方便

定时任务相关的文件

  1. /var/spool/cron/ # 定时任务的配置文件所在目录
  2. /var/log/cron # 定时任务的日志文件 运行过程的一个记录,无法显示运行的对不对
  3. /etc/cron.deny # 哪些用户禁止使用定时任务 - 定时任务黑名单

关于如何看日志

定时任务格式与常见写法

格式说明

什么时间做什么事情

时间分为5个部分-----分时日月周,事情就是命令或者脚本

两个例子

定时任务常用符号

  1. * #每
  2. /n #隔 */10 * * * * 表示每隔10分钟
  3. - #从哪到哪 07-08
  4. #分隔 17,18,21

例子

题目:每5分钟同步一下系统的时间

  1. #第一个里程碑-命令
  2. ntpdate ntp1.aliyun.com
  3. #注意:编写定时任务要使用命令的绝对路径
  4. /usr/sbin/ntpdate ntp1.aliyun.com
  5. #第二个里程碑-写入定时任务
  6. crontab -e
  7. #在文件中写入
  8. # sync time by pizza at 20190123 00:15
  9. */5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com
  10. #第三个里程碑-检查
  11. ##1)看日志
  12. tail -f /var/log/cron
  13. ##2)看结果
  14. 查看时间是否在跟新(可以先手动更改)
  15.  
  16. 注:You have mail in /var/spool/mail/root
    在修改时间时,会出现这句话。下面会说到

题目:每天的上午7点到11点,每一个小时运行cmd命令

  1. # 注意:在写小时的时候,一定要加上00,否则就表示没分钟
  2. * 07-11 * * * CMD # 表示没分钟都运行
  3. 00 07-11 * * * CMD # 表示每个小时都运行

题目:每分钟把自己的名字 追加到/oldboy/oldboy.txt

依照上面的流程:命令----写入----检查

  1. * * * * * echo `whoami` >> /oldboy/oldboy.txt

定时任务的书写流程总结

  1. #1、命令行测试
  2. #2、把命令放入脚本中(命令多的时候)
  3. #3、测试脚本是否可以使用
  4. #4、写定时任务
  5. #5、检查结果

定时任务九句箴言

01、定时任务命令之前要加一行注释

注:注释中写清楚备注信息,谁在什么时间做什么

02、在写定时任务的时候,使用脚本替代命令

注:超过两条命令都使用脚本

题目:每分钟显示当前系统的时间(年-月-日),追加到/tmp/time.log中

  1. ##01、命令
  2. [root@learn-Linux001 ~]# date +%F
  3. 2019-01-30
  4. ##02、脚本
  5. [root@learn-Linux001 ~]# mkdir -p /server/scripts
  6. 将脚本都放在/server/scripts目录下
  7. [root@learn-Linux001 ~]# vim /server/scripts/date.sh
  8. 创建脚本,写入命令
  9. [root@learn-Linux001 ~]# sh /server/scripts/date.sh
  10. 2019-01-30
  11. 因为创建的文件没有执行权限(默认644),所以我们使用sh来执行
  12. [root@learn-Linux001 ~]# sh /server/scripts/date.sh >>/tmp/date.log
  13. [root@learn-Linux001 ~]# cat /tmp/date.log
  14. 2019-01-30
  15. 测试脚本,成功
  16. ##03、脚本写入定时任务
  17. # print date to file by pizza at 20190128 18:50
  18. * * * * * /bin/sh /server/scripts/date.sh >>/tmp/date.log
  19. 使用命令的绝对路径
  20. ##04、检查(看日志,看结果)
  21. tail -f /etc/log/cron
  22. tail -f /tmp/date.log

03、定时任务中date命令%百分号

当我们在定时任务中,直接使用命令获取时间,得到的结果为空

通过查看日志,发现,执行的命令是date +

因为,%后面的内容内忽略了,如果一定要使用,可以带上撬棍(\)

  1. * * * * * date +\%F-\%T >> /tmp/time.txt >&1

04、运行脚本一定要使用/bin/sh

在创建脚本的时候,以sh为后缀

05、把命令或者脚本的结果定向到文件中

定时任务中,命令或者脚本结果(正确或错误)定向到黑洞(>/dev/null 2>&1)或追加到文件中(>> /tmp/oldboy.txt 2>&1)

否则,就会导致故障

企业案例

如果没有上面所说的操作,很容易导致硬盘inode空间被占满,从而导致系统服务不正常

  1. 定时任务中,命令或者脚本的结果,没有定向到空或者文件中,系统会发邮件
  2. #1、邮件的软件没有开启------大量的小文件堆积在/var/spool/postfix/maildrop/ ---inode满了
  3. #2、邮件软件开启了------定时任务会不断的给root用户发邮件
  4. you have new mail in /var/spool/mail/root
  5.  
  6. #查看邮件服务开启没有?
  7. [root@learn-Linux001 ~]# /etc/init.d/postfix status
  8. master (pid 1592) is running...

06、避免不必要的程序及命令输出

tar  zcf

tar  zcvf    不可取

07、创建压缩包使用相对路径

切到目标目录的上一级打包目标

  1. [root@learn-Linux001 ~]# cd /
  2. [root@learn-Linux001 /]# tar zcf /tmp/ser-$(date +%F).tar etc/services
  3. 或者
  4. cd / && tar zcf /tmp/ser-$(date +%F).tar etc/services

08、定时任务脚本中的程序文件,尽量使用绝对路径

否则,可能会出现找不到命令的错误

因为,定时任务运行脚本的时候可以识别的PATH只有 /usr/bin 和 /bin

  1. 解决方法:
  2.  
  3. #1、使用绝对路径 /sbin/ifconfig
  4. #2、在脚本开头重新定义一下PATH
  5. ## export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

用户的定时任务,默认要存放在当前用户的家目录

系统的定时任务,默认要存放在根目录下

09、系统与命令位置有关的环境变量问题

01)、定时任务运行脚本的时候可以识别的PATH只有 /usr/bin 和 /bin

02)、java环境变量故障案例

linux定时任务生产java服务无法执行问题案例http://oldboy.blog.51cto.com/2561410/1541515

补充:删除大量堆积小文件

创建环境

  1. [root@learn-Linux001 oldboy]# touch {1..500000}.txt
  2. -bash: /bin/touch: Argument list too long # 数量太多,无法运行,使用下面的方法
  3. [root@learn-Linux001 oldboy]# echo {1..500000}.txt|xargs touch

最后导致no space left on device

  1. [root@learn-Linux001 ~]# df -h
  2. Filesystem Size Used Avail Use% Mounted on
  3. /dev/sda3 6.9G 1.5G 5.1G 22% /
  4. tmpfs 926M 0 926M 0% /dev/shm
  5. /dev/sda1 190M 35M 146M 19% /boot
  6. [root@learn-Linux001 ~]# df -hi
  7. Filesystem Inodes IUsed IFree IUse% Mounted on
  8. /dev/sda3 452K 452K 0 100% /
  9. tmpfs 232K 1 232K 1% /dev/shm
  10. /dev/sda1 50K 38 50K 1% /boot

是因为inode满了

  1. [root@learn-Linux001 ~]# cd /oldboy/
  2. [root@learn-Linux001 oldboy]# rm -f *
  3. -bash: /bin/rm: Argument list too long 直接删除失败
  4. [root@learn-Linux001 oldboy]# ls |xargs rm -f
    [root@learn-Linux001 oldboy]# ll
    total 0
  5. 这样删除,成功(删除小文件)
    可能会遇到更多的文件,这样也不能删除
    解决办法是,筛选后进行批量删除

定时任务总结

待...

Linux之定时任务crond的更多相关文章

  1. Linux之定时任务Crond使用

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

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

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

  3. Linux之定时任务Crond介绍

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

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

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

  5. Linux:定时任务crond服务

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

  6. linux添加定时任务crond

    1.crontab –e:编辑当前定时任务 保存完重新crond : service crond restart 2. crontab用法 crontab –e : 修改 crontab 文件,如果文 ...

  7. linux定时任务crond export变量问题

    linux定时任务crond export变量问题 1)我写了一个重启resin的脚本,由于业务原因,需要定时在某一个时间重启下resin服务器,于是就在 crontab里配置了如下内容: 50 17 ...

  8. linux定时任务crond那些事!

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

  9. Linux定时任务--Crond使用教程

    Linux定时任务--Crond使用教程 1. 介绍Crond crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后 ...

随机推荐

  1. C#自动关闭弹出提示框

    自动关闭弹出提示框(用一个小窗体显示提示信息):例如在一个form窗体中弹出自动关闭的提示框1.首先创建一个弹出提示信息的窗体 AutoCloseMassageBox,在里面拖一个lable控件,去掉 ...

  2. Field 'id' doesn't have a default value错误解决方法

    Field 'id' doesn't have a default value 错误提示. 主键类型获取方式为"native"由数据库生成指定. 检查发现数据库中已存在Employ ...

  3. thinkphp——通过在线编辑器添加的内容在模板里正确显示(只显示内容,而不是html代码)

    thinkphp编辑器回显问题如下: 解决办法如下: 对于编辑器发布的内容,前台模板显示为html的解决办法是: 在模板输出字段加入html_entity_decode()函数 也就是:PHP输出时的 ...

  4. SqL读取XML、解析XML、SqL将XML转换DataTable、SqL将XML转换表

    DECLARE @ItemMessage XML )) SET @ItemMessage=N' <ReceivablesInfos> <ReceivablesList> < ...

  5. JavaScript for/in 语句 遍历数组内容

    for-in遍历 for-in是为遍历对象而设计的,不适用于遍历数组. 遍历数组的缺点:数组的下标index值是数字,for-in遍历的index值"0","1" ...

  6. jQuery与vue分别实现超级简单的绿色拖动验证码功能

    jquery的绿色拖动验证功能 在网上看到了一个这样的问题:那种像拖动滑块匹配图形的验证方式是怎么实现的?. 突然想到实现一个简单绿色拖动验证码的功能,在网上搜了下,有一个用jquery实现的该功能代 ...

  7. CSS3 Transform、Transition和Animation属性总结

    CSS3的三个与变形和动画啊相关的属性: Transform 浏览器支持情况: Internet Explorer 10.Firefox.Opera 支持 transform 属性. Internet ...

  8. Testlink1.9.17使用方法(第十一章 其他易用性功能)

    第十一章 其他易用性功能 QQ交流群:585499566 一. 自定义 一). 自定义字段管理 在主页点击[自定义字段管理]按钮-->进入自定义字段管理页面,点击[创建]按钮,可以创建一个字段, ...

  9. mac下编译node源码

    看过一篇win7 64x下面编译node的文章,链接地址:编译nodejs及其源码研究 下面学习一下在mac下面如何编译node源码. 过程也挺简单. 1.下载源码. > mkdir nodes ...

  10. Python——pyHook监听鼠标键盘事件

    pyHook包为Windows中的全局鼠标和键盘事件提供回调. 底层C库报告的信息包括事件的时间,事件发生的窗口名称,事件的值,任何键盘修饰符等. 而正常工作需要pythoncom等操作系统的API的 ...