定时任务基础

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了定时任务基础相关的知识,希望对你有一定的参考价值。

定时任务基础

1.1闹钟与定时任务Crond

1.1.1crond是什么

crondlinux系统中用来定期执行命令/脚本或指定程序任务的一种服务或软件。

特殊需求:crond服务搞不定了,一般工作中书写shell脚本守护进程执行。

Crond相当于闹钟

1.1.2程序、进程、守护进程

进程(文件):放在磁盘里的,程序代码组成,但是没有在计算机内执行,当前没有执行。

进程:所谓进程就是计算机中正在执行/运行的进程,运行起来的程序。

守护进程:守护进程就是一直运行的程序。

1.2定时任务分类

atatd):适合仅执行一次就结束的调度任务命令。(工作中从来都没有需求用这个)

crondcrontab 管理命令):这个命令可以周期性的执行任务工作

anacron:这个命令主要用于不是7*24小时开机的服务器准备的,anacron并不能指定具体时间执行任务工作,而是以天为周期或者在系统每次开机后执行的任务工作。

1.2.1开机自启动crond服务

chkconfig

 

1.3cron分类:用户定时任务与系统定时任务

1.3.1用户

crontab -l

/var/spool/cron/root 用户的定时任务

1.3.2系统的定时任务

/etc/cron.hourly

/etc/cron.daily

/etc/cron.weekly

/etc/cron.monthly

/etc/cron.deny

/etc/crontab系统定时任务的配置文件之一

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

1.4定时任务使用

1.4.1定时任务依赖的软件(服务)--是否能用

如何查看定时任务服务是否在运行

1.4.1.1 临时

/etc/init.d/crondstatus

[[email protected] ~]# /etc/init.d/crondstatus

crond (pid 1585) is running...

pid 进程的id号,给每个进程起一个独一无二的号码(身份证)

进程是否健在

ps-ef |grep crond |wc -l

[[email protected] ~]# ps -ef |grep crond

root      1585      1  0 Aug03 ?        00:00:01 crond

root      4679   4652  0 20:47 pts/1    00:00:00 egrep --color=auto --color=autocrond

看第一个ps -ef |grep crond |grep -vgrep

root      1585      1  0 Aug03 ?        00:00:01 crond

看一个ps -ef |grep crond |grep-v grep|wc -l

[[email protected] ~]# ps -ef |grep crond|grep -v grep|wc -l

1

查看crond是否开机自启动

[[email protected] ~]# chkconfig |grep crond

crond                0:off      1:off      2:on       3:on       4:on       5:on       6:off

grep -c 统计行数,统计包含你想要的东西一共有几行

1.4.1.2 永久

 

1.4.2crontab命令使用--怎么用

指令选项说明含义

-l(小写字母L):查看crontab文件内容。显示当前用户的定时任务内容的配置。

-e:编辑crontab文件内容,提示:e可理解为edit的缩写。编辑或修改定时任务文件。

-i:删除crontab文件内容,删除前会提示确认。用的很少。

-r:删除crontab文件内容,清空所有,用的很少。

-u user :指定使用的用户执行任务。crontab默认编辑当前用户的定时任务配置。

特别强调:-i-r参数在生产中很少用,没什么需求必须要用-e进去编辑即可。

[[email protected] oldboy]# crontab -l(查看定时任务)

no crontab for root (没有定时任务)

[[email protected] oldboy]# crontab -e(修改定时任务)

 

crontab==cat/var/spool/cron/root 查看

1.4.3为何使用crontab命令:

1.有语法检查功能

2.方便

 

1.4.4定时任务相关文件

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

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

/var/spool/cron:所有用户crontab配置文件默认都存放在此目录,文件名以用户名命名

  1. 定时任务的配置文件,定时任务规则

  2. 文件名就是用户名(root

/var/log/cron:定时任务的日志文件

 

1.4.5定时任务基本格式(分时日月周)

系统的定时任务

[[email protected] oldboy]# cat/etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

 

# For details see man 4 crontabs

 

# 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周几

# | |  |  |  |                                                      07周日

# * *  *  *  *user-name command to be executed

1.4.6用户定时任务实例:

01 **** cmd ##01分钟 每小时的第1分钟执行一次

  数字表示什么时间-不要考虑重复-不要考虑多久执行一次

  然后在想下一次执行的时间,多久执行一次

***** ##每分钟

02 04 *** cmd 凌晨04点02分,多久执行一次,每天的凌晨04点02分

22 14 ** 00 cmd 周日的下午14点22,每周的周日下午2点22分执行

42 04 01 ** cmd 1号凌晨4点42分,每个月的1号凌晨4点42分

1.4.7提示及小结

  cmd为要执行的命令或脚本

  每个列之间必须要有一个空格

  第一个里程碑:把字面的翻译成实际的时间(这里不用考虑多久一次/重复)

  第二个里程碑:思考多久重复一次或者思考下一次执行是什么时候

1.4.8crontab语法格式中特殊符号含义

*  *号,表示任意时间都,实际就是“每”“任意”的意思

减号,从哪里开始到哪里结束,表示一个时间范围,区间段

逗号,并且,和,表示分隔时段的意思 17,18,19

/n  n代表数字,即“每隔n单位时间”,例如:每10分钟执行一次

实例1-1

30 3-5,17-19***/bin/sh/scripts/oldboy.sh

每天的3点到5点还有17点到19点的半点执行脚本

 

实例1-2 

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

第一个里程碑-如何显示自己的名字,并放入文件中

echo "oldboyedu" >>/oldboy/oldboy.txt

cat /oldboy/oldboy.txt

第二个里程碑-定时任务怎么写

crontab -e

#echo name heyong 20170102

echo "oldboyedu" >>/oldboy/oldboy.txt

crontab -e

第三个里程碑-测试,看看结果

tail -f /oldboy/oldboy.txt

date

第四个里程碑-遇到错误-排错

tail /var/log/cron

 

1.5定时任务书写过程

第一个里程碑:命令行测试-把你的名字显示到文件中

第二个里程碑:把命令放入到脚本中

第三个里程碑:测试下脚本是否可以用

第四个里程碑:写定时任务

第五个里程碑:检查结果

 

1.6总结:10字箴言

1.定时任务规则之前加注释

2.定时任务脚本中的程序命令及路径尽量使用绝对路径

3.使用脚本程序替代命令行定时问题

4定时任务的脚本权限问题

5.定时任务中命令或脚本结果(正确错误定向到或追加到文件中

6.避免不必要的程序及命令输出

7.打包压缩使用相对路径(切到目标目录上的一级打包目标)

8.时间变量问题用反斜线

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


本文出自 “heyong” 博客,请务必保留此出处http://heyong.blog.51cto.com/13121269/1954021

以上是关于定时任务基础的主要内容,如果未能解决你的问题,请参考以下文章

SpringBootJava使用Scheduled注解实现定时任务功能—基础篇

动态创建管理定时任务-已完成

Spring Boot 2.x基础教程:使用@Scheduled实现定时任务

Spring Boot 2.x基础教程:使用@Scheduled实现定时任务

mysql 基础 事件(定时任务)

Linux定时任务管理