Linux之定时任务crond
定时任务说明与分类
定时任务的应用场景举例
每天晚上 12点备份/etc/目录
tar
定时任务的三种分类
crond(crontab)定时任务软件(软件包cronie),用的最多的一种
atd,应用在只运行一次的任务
anacron ,非7*24小时运行的服务器(比如开机多长时间运行,关机多长时间运行)
- [root@Dao ~]# rpm -qa cronie 查看安装的cronie软件版本
- cronie-1.4.4-16.el6_8.2.x86_64
- [root@Dao ~]# rpm -ql cronie 查看软件包详细列表
- /etc/cron.d
- /etc/cron.d/0hourly
- /etc/cron.deny
- /etc/pam.d/crond
- /etc/rc.d/init.d/crond # crond定时软件
- /etc/sysconfig/crond
- /usr/bin/crontab
- /usr/sbin/crond
- /usr/share/doc/cronie-1.4.4
- /usr/share/doc/cronie-1.4.4/AUTHORS
- /usr/share/doc/cronie-1.4.4/COPYING
- /usr/share/doc/cronie-1.4.4/ChangeLog
- /usr/share/doc/cronie-1.4.4/INSTALL
- /usr/share/doc/cronie-1.4.4/README
- /usr/share/man/man1/crontab.1.gz
- /usr/share/man/man5/crontab.5.gz
- /usr/share/man/man8/cron.8.gz
- /usr/share/man/man8/crond.8.gz
- /var/spool/cron
用户与系统定时任务
系统定时任务
系统定时任务主要和四个文件有关(cron.daily、cron.hourly、cron.monthly、cron.weekly)
系统会定时自动运行文件里面的内容
- [root@Dao ~]# ls -l /etc/ |grep cron.
- -rw------- 1 root root 541 Aug 24 2016 anacrontab
- drwxr-xr-x. 2 root root 4096 Jan 24 21:32 cron.d
- drwxr-xr-x. 2 root root 4096 Sep 27 2011 cron.daily # 每天
- -rw------- 1 root root 0 Aug 24 2016 cron.deny
- drwxr-xr-x. 2 root root 4096 Jan 24 21:32 cron.hourly # 每小时
- drwxr-xr-x 2 root root 4096 Sep 27 2011 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 # 每周
- #有些病毒会在文件中插入定时任务,自动运行,所以很难彻底清除
系统定时任务相关:系统定时任务+logrotate命令 完成对 日志的日志切割、日志轮询
- 定时对这几个文件进行切割
/var/log/cron- /var/log/secure
- /var/log/messages
查看日志目录下的日志文件
- [root@Dao ~]# ls -l /var/log/secure* /var/log/messages*
- -rw------- 1 root root 1498 Jan 24 21:32 /var/log/messages
- -rw------- 1 root root 438 Dec 12 12:27 /var/log/messages-20181216
- -rw------- 1 root root 141 Dec 16 03:29 /var/log/messages-20181223
- -rw------- 1 root root 141 Dec 23 03:14 /var/log/messages-20181230
- -rw------- 1 root root 206 Jan 3 12:40 /var/log/messages-20190106
- -rw------- 1 root root 45504 Jan 29 21:13 /var/log/secure
- -rw------- 1 root root 40715 Dec 16 01:10 /var/log/secure-20181216
- -rw------- 1 root root 49052 Dec 23 02:34 /var/log/secure-20181223
- -rw------- 1 root root 22145 Dec 30 03:08 /var/log/secure-20181230
- -rw------- 1 root root 33336 Jan 5 23:38 /var/log/secure-20190106
logrotate里面的内容
- [root@Dao ~]# cat /etc/cron.daily/logrotate
- #!/bin/sh
- /usr/sbin/logrotate /etc/logrotate.conf
- EXITVALUE=$?
- if [ $EXITVALUE != 0 ]; then
- /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
- fi
- exit 0
- [root@Dao ~]# cat /etc/logrotate.d/syslog
- /var/log/cron
- /var/log/maillog
- /var/log/messages
- /var/log/secure
- /var/log/spooler
- {
- sharedscripts
- postrotate
- /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
- endscript
- }
用户的定时任务
使用的几个命令
- crontab -l (list) #查看用户的定时任务(列表)cron table
- crontab -e (edit) #编辑用户的定时任务
- /var/spool/cron/root #(root是用户名 root用户的定时任务)用户定时任务存放的目录
第一次用的时候回提示
- [root@Dao ~]# crontab -l
- no crontab for root #用户没有定时任务
注:Linux中,每个用户的定时任务是分开的
在定时任务中添加项目
- [root@Dao ~]# crontab -e 编辑定时任务
- # 和vim的操作是一样的,我写入了# pizza然后保存退出
- no crontab for root - using an empty one
- crontab: installing new crontab
- [root@Dao ~]# crontab -l
- # pizza
定时任务的使用
在使用之前,一定要确保定时任务依赖的软件(服务)是否可以使用
- # 查看定时任务是否在运行
- # 第一种方法
- [root@Dao ~]# /etc/init.d/crond status
- crond is stopped
- # 第二种方法
- [root@Dao ~]# ps -ef |grep crond
- root 17714 17688 0 22:01 pts/0 00:00:00 grep crond
- # 查看定时任务,是不是开机自启动,要保证重启后也在运行
- [root@Dao ~]# chkconfig |grep crond
- crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
- # 3 位置是on就是开机自启动了
定时任务的开启和关闭
- [root@Dao ~]# /etc/init.d/crond start
- Starting crond: [ OK ]
- [root@Dao ~]# /etc/init.d/crond status
- crond (pid 17733) is running...
- [root@Dao ~]# /etc/init.d/crond stop
- Stopping crond: [ OK ]
- [root@Dao ~]# /etc/init.d/crond status
- crond is stopped
定时任务的开机启动关闭和开启
- [root@Dao ~]# chkconfig crond off
- [root@Dao ~]# chkconfig |grep crond
- crond 0:off 1:off 2:off 3:off 4:off 5:off 6:off
- [root@Dao ~]# chkconfig crond on
- crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
如何用crontab?
- [root@Dao ~]# crontab --help
- crontab: invalid option -- '-'
- crontab: usage error: unrecognized option
- usage: crontab [-u user] file
- crontab [-u user] [ -e | -l | -r ]
- (default operation is replace, per 1003.2)
- -e (edit user's crontab) #查看列表 就相当于在查看/var/spool/cron/root
- -l (list user's crontab) #编辑 就相当于在编辑 /var/spool/cron/root
- -r (delete user's crontab) #把当前都删掉,无提示,直接删
- -i (prompt before deleting user's crontab) #删除之前提示
- -s (selinux context)
为什么使用crontab命令,而不是直接操作/var/spool/cron/root这个文件呢?
- 1、命令有语法检查功能,
- 2、更方便
定时任务相关的文件
- /var/spool/cron/ # 定时任务的配置文件所在目录
- /var/log/cron # 定时任务的日志文件 运行过程的一个记录,无法显示运行的对不对
- /etc/cron.deny # 哪些用户禁止使用定时任务 - 定时任务黑名单
关于如何看日志
定时任务格式与常见写法
格式说明
什么时间做什么事情
时间分为5个部分-----分时日月周,事情就是命令或者脚本
两个例子
定时任务常用符号
- * #每
- /n #隔 */10 * * * * 表示每隔10分钟
- - #从哪到哪 07-08
- , #分隔 17,18,21
例子
题目:每5分钟同步一下系统的时间
- #第一个里程碑-命令
- ntpdate ntp1.aliyun.com
- #注意:编写定时任务要使用命令的绝对路径
- /usr/sbin/ntpdate ntp1.aliyun.com
- #第二个里程碑-写入定时任务
- crontab -e
- #在文件中写入
- # sync time by pizza at 20190123 00:15
- */5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com
- #第三个里程碑-检查
- ##1)看日志
- tail -f /var/log/cron
- ##2)看结果
- 查看时间是否在跟新(可以先手动更改)
- 注:You have mail in /var/spool/mail/root
在修改时间时,会出现这句话。下面会说到
题目:每天的上午7点到11点,每一个小时运行cmd命令
- # 注意:在写小时的时候,一定要加上00,否则就表示没分钟
- * 07-11 * * * CMD # 表示没分钟都运行
- 00 07-11 * * * CMD # 表示每个小时都运行
题目:每分钟把自己的名字 追加到/oldboy/oldboy.txt
依照上面的流程:命令----写入----检查
- * * * * * echo `whoami` >> /oldboy/oldboy.txt
定时任务的书写流程总结
- #1、命令行测试
- #2、把命令放入脚本中(命令多的时候)
- #3、测试脚本是否可以使用
- #4、写定时任务
- #5、检查结果
定时任务九句箴言
01、定时任务命令之前要加一行注释
注:注释中写清楚备注信息,谁在什么时间做什么
02、在写定时任务的时候,使用脚本替代命令
注:超过两条命令都使用脚本
题目:每分钟显示当前系统的时间(年-月-日),追加到/tmp/time.log中
- ##01、命令
- [root@learn-Linux001 ~]# date +%F
- 2019-01-30
- ##02、脚本
- [root@learn-Linux001 ~]# mkdir -p /server/scripts
- 将脚本都放在/server/scripts目录下
- [root@learn-Linux001 ~]# vim /server/scripts/date.sh
- 创建脚本,写入命令
- [root@learn-Linux001 ~]# sh /server/scripts/date.sh
- 2019-01-30
- 因为创建的文件没有执行权限(默认644),所以我们使用sh来执行
- [root@learn-Linux001 ~]# sh /server/scripts/date.sh >>/tmp/date.log
- [root@learn-Linux001 ~]# cat /tmp/date.log
- 2019-01-30
- 测试脚本,成功
- ##03、脚本写入定时任务
- # print date to file by pizza at 20190128 18:50
- * * * * * /bin/sh /server/scripts/date.sh >>/tmp/date.log
- 使用命令的绝对路径
- ##04、检查(看日志,看结果)
- tail -f /etc/log/cron
- tail -f /tmp/date.log
03、定时任务中date命令%百分号
当我们在定时任务中,直接使用命令获取时间,得到的结果为空
通过查看日志,发现,执行的命令是date +
因为,%后面的内容内忽略了,如果一定要使用,可以带上撬棍(\)
- * * * * * date +\%F-\%T >> /tmp/time.txt >&1
04、运行脚本一定要使用/bin/sh
在创建脚本的时候,以sh为后缀
05、把命令或者脚本的结果定向到文件中
定时任务中,命令或者脚本结果(正确或错误)定向到黑洞(>/dev/null 2>&1)或追加到文件中(>> /tmp/oldboy.txt 2>&1)
否则,就会导致故障
企业案例
如果没有上面所说的操作,很容易导致硬盘inode空间被占满,从而导致系统服务不正常
- 定时任务中,命令或者脚本的结果,没有定向到空或者文件中,系统会发邮件
- #1、邮件的软件没有开启------大量的小文件堆积在/var/spool/postfix/maildrop/ ---inode满了
- #2、邮件软件开启了------定时任务会不断的给root用户发邮件
- you have new mail in /var/spool/mail/root
- #查看邮件服务开启没有?
- [root@learn-Linux001 ~]# /etc/init.d/postfix status
- master (pid 1592) is running...
06、避免不必要的程序及命令输出
tar zcf
tar zcvf 不可取
07、创建压缩包使用相对路径
切到目标目录的上一级打包目标
- [root@learn-Linux001 ~]# cd /
- [root@learn-Linux001 /]# tar zcf /tmp/ser-$(date +%F).tar etc/services
- 或者
- cd / && tar zcf /tmp/ser-$(date +%F).tar etc/services
08、定时任务脚本中的程序文件,尽量使用绝对路径
否则,可能会出现找不到命令的错误
因为,定时任务运行脚本的时候可以识别的PATH只有 /usr/bin 和 /bin
- 解决方法:
- #1、使用绝对路径 /sbin/ifconfig
- #2、在脚本开头重新定义一下PATH
- ## 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
补充:删除大量堆积小文件
创建环境
- [root@learn-Linux001 oldboy]# touch {1..500000}.txt
- -bash: /bin/touch: Argument list too long # 数量太多,无法运行,使用下面的方法
- [root@learn-Linux001 oldboy]# echo {1..500000}.txt|xargs touch
最后导致no space left on device
- [root@learn-Linux001 ~]# df -h
- Filesystem Size Used Avail Use% Mounted on
- /dev/sda3 6.9G 1.5G 5.1G 22% /
- tmpfs 926M 0 926M 0% /dev/shm
- /dev/sda1 190M 35M 146M 19% /boot
- [root@learn-Linux001 ~]# df -hi
- Filesystem Inodes IUsed IFree IUse% Mounted on
- /dev/sda3 452K 452K 0 100% /
- tmpfs 232K 1 232K 1% /dev/shm
- /dev/sda1 50K 38 50K 1% /boot
是因为inode满了
- [root@learn-Linux001 ~]# cd /oldboy/
- [root@learn-Linux001 oldboy]# rm -f *
- -bash: /bin/rm: Argument list too long 直接删除失败
- [root@learn-Linux001 oldboy]# ls |xargs rm -f
[root@learn-Linux001 oldboy]# ll
total 0- 这样删除,成功(删除小文件)
可能会遇到更多的文件,这样也不能删除
解决办法是,筛选后进行批量删除
定时任务总结
待...
Linux之定时任务crond的更多相关文章
- Linux之定时任务Crond使用
Linux之定时任务Crond使用 一.用法 crond服务是linux系统自带的服务,是不需要手动安装的: crond服务是一种守护进程: Linux中的用户使用contab命令来配置corn任务: ...
- Linux系统定时任务crond那些事
1 Linux系统定时任务 1.1 定时任务介绍 1.1.1 Crond是什么? Crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件.Centos5/ linux系统安装完操作 ...
- Linux之定时任务Crond介绍
Linux之定时任务 定时任务Crond介绍 Crond是linux系统中用来定期执行命令/脚本或指定程序任务的一种服务或软件,一般情况下,我们安装完Centos5/6 linux操作系统之后,默认便 ...
- linux系统定时任务crond入门
1,Crond: Crond是linux系统中用来定期执行命令或指定程序任务的一种服务或者软件.(Centos5以后默认存在) 当优化开机自启动的时候,第一个就是crond. Crond服务默认情况( ...
- Linux:定时任务crond服务
一.crond简介 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动cro ...
- linux添加定时任务crond
1.crontab –e:编辑当前定时任务 保存完重新crond : service crond restart 2. crontab用法 crontab –e : 修改 crontab 文件,如果文 ...
- linux定时任务crond export变量问题
linux定时任务crond export变量问题 1)我写了一个重启resin的脚本,由于业务原因,需要定时在某一个时间重启下resin服务器,于是就在 crontab里配置了如下内容: 50 17 ...
- linux定时任务crond那些事!
1.定时任务crond介绍 1.1 crond是什么 crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件. 特殊需求:(秒级别)crond服务就无法搞定了,一般工作中写脚本守护 ...
- Linux定时任务--Crond使用教程
Linux定时任务--Crond使用教程 1. 介绍Crond crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后 ...
随机推荐
- C#自动关闭弹出提示框
自动关闭弹出提示框(用一个小窗体显示提示信息):例如在一个form窗体中弹出自动关闭的提示框1.首先创建一个弹出提示信息的窗体 AutoCloseMassageBox,在里面拖一个lable控件,去掉 ...
- Field 'id' doesn't have a default value错误解决方法
Field 'id' doesn't have a default value 错误提示. 主键类型获取方式为"native"由数据库生成指定. 检查发现数据库中已存在Employ ...
- thinkphp——通过在线编辑器添加的内容在模板里正确显示(只显示内容,而不是html代码)
thinkphp编辑器回显问题如下: 解决办法如下: 对于编辑器发布的内容,前台模板显示为html的解决办法是: 在模板输出字段加入html_entity_decode()函数 也就是:PHP输出时的 ...
- SqL读取XML、解析XML、SqL将XML转换DataTable、SqL将XML转换表
DECLARE @ItemMessage XML )) SET @ItemMessage=N' <ReceivablesInfos> <ReceivablesList> < ...
- JavaScript for/in 语句 遍历数组内容
for-in遍历 for-in是为遍历对象而设计的,不适用于遍历数组. 遍历数组的缺点:数组的下标index值是数字,for-in遍历的index值"0","1" ...
- jQuery与vue分别实现超级简单的绿色拖动验证码功能
jquery的绿色拖动验证功能 在网上看到了一个这样的问题:那种像拖动滑块匹配图形的验证方式是怎么实现的?. 突然想到实现一个简单绿色拖动验证码的功能,在网上搜了下,有一个用jquery实现的该功能代 ...
- CSS3 Transform、Transition和Animation属性总结
CSS3的三个与变形和动画啊相关的属性: Transform 浏览器支持情况: Internet Explorer 10.Firefox.Opera 支持 transform 属性. Internet ...
- Testlink1.9.17使用方法(第十一章 其他易用性功能)
第十一章 其他易用性功能 QQ交流群:585499566 一. 自定义 一). 自定义字段管理 在主页点击[自定义字段管理]按钮-->进入自定义字段管理页面,点击[创建]按钮,可以创建一个字段, ...
- mac下编译node源码
看过一篇win7 64x下面编译node的文章,链接地址:编译nodejs及其源码研究 下面学习一下在mac下面如何编译node源码. 过程也挺简单. 1.下载源码. > mkdir nodes ...
- Python——pyHook监听鼠标键盘事件
pyHook包为Windows中的全局鼠标和键盘事件提供回调. 底层C库报告的信息包括事件的时间,事件发生的窗口名称,事件的值,任何键盘修饰符等. 而正常工作需要pythoncom等操作系统的API的 ...