[TOC]
1. Linux有个三种方式 **/etc/cron.d** , **/etc/crontab文件**和**crontab -e**,遇到的很多黑客攻击都会用定时来不断的摧残我们的系统。
2. cron服务的最低检测时间单位是分钟,所以cron会每分钟读取一次/etc/crontab与/var/spool/cron中的数据内容,因此,编辑完/etc/crontab文件并且保存之后,crontab时设定就会自动执行。
**3. cron执行时,也就是要读取三个地方的配置文件:一是/etc/crontab,二是/etc/cron.d目录下的所有文件,三是每个用户的配置文件. **
## **1. /etc/crontab文件**
### **1.1这种设置定时任务的方法,只限于root用户(用于root给自己与其他用户分配定时任务)**
```
root@ubuntu01:~# ll /etc/crontab
-rw-r--r-- 1 root root 420 Nov 8 18:25 /etc/crontab
```
如上,只有root有权修改这个文件。
### **1.2创建定时任务**
```
* * * * * <用户> <commond> :给某一用户创建定时任务
```
```
root@ubuntu01:~# vim /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
*/2 * * * * root echo "dd" >> /root/test
```
### **1.3.这种方式,通过`crontab -l`是*不能显示用户的定时任务的***
```
root@ubuntu01:~# crontab -l
no crontab for root
```
### **1.4直接删除定时任务的那行就可以停止定时任务**
### **1.5 centos与Ubuntu的区别**
#### 1.5.1 Ubuntu的/etc/crontab
```
root@ubuntu02:~# vim /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
```
#### 1.5.2 centos的 /etc/crontab
```
[root@localhost ~]# vi /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 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
# | | | | |
# * * * * * user-name command to be executed
```
### 1.5.3说明
1.Ubuntu的文件多出了几行`25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )`这种东西
2.run-parts --report /etc/cron.daily ://每天执行/etc/cron.hourly内的脚本,run-parts代表执行目录中的脚本,不加的话要指定执行的脚本了,而不是目录。
3.难道centos就没有类似的这种文件吗?有:
```
[root@localhost etc]# ls | grep cron
anacrontab
cron.d
cron.daily
cron.deny
cron.hourly
cron.monthly
crontab
cron.weekly
```
## **2.crontab -e**
**1.这种所有用户都可以使用,普通用户也只能为自己设置计划任务
2.然后自动将定时任务写入/var/spool/cron/crontabs/username**
### **2.1创建定时任务**
```
tuna@ubuntu01:~$ crontab -e
# Edit this file to introduce tasks to be run by cron.
...
#
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
*/1 * * * * echo "I am tuna,hello!" > ~/tuna.txt
```
### **2.2查看定时任务**
```
tuna@ubuntu01:~$ crontab -l
# Edit this file to introduce tasks to be run by cron.
#
...
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
*/1 * * * * echo "I am tuna,hello!" > ~/tuna.txt
```
### **2.3删除定时任务**
执行下边的命令后,自动删除属于当前用户的定时任务
```
crontab -r
```
## 3. /etc/cron.d
```
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root # 发生错误会给/var/spool/mail/root发送email
*/1 * * * * root /root/test.sh
```
## 4. crontab的限制
```
/etc/cron.allow:将可以使用 crontab 的帐号写入其中,若不在这个文件内的使用者则不可使用 crontab;
/etc/cron.deny:将不可以使用 crontab 的帐号写入其中,若未记录到这个文件当中的使用者,就可以使用 crontab 。
```
如果有需要,使用其中一种方式即可
### 3.1 实例
```
root@ubuntu01:~# cat /etc/cron.deny
tuna test
```
## **5.anacron**
1.anacron并不能取代cron去运行某项任务,而是以天为单位或者是在启动后立刻进行anacron的动作,**它会去侦测停机期间应该进行但是并没有进行的crontab任务,并将该任务运行一遍**后,anacron就会自动停止了。
**2.anacron运行的时间通常由两个,一个是系统启动期间运行,一个是写入crontab的排程中,这样才能够在特定时间分析系统未进行的crontab工作。**
**3.anacron的配置文件是/etc/anacrontab**
```
[root@localhost cron.hourly]# vi /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
```
**4.anacron命令的语法如下:**
(1)-s开始连续的运行各项工作,会一句时间记录当的数据判断是否进行。
(2)-f强制进行,而不去判断时间登录档的时间戳。
(3)-n立即进行未进行的任务,而不延迟等待时间。
(4)-u仅升级时间记录当的时间戳,不进行任何工作。
而anacron的配置文件是/etc/anacrontab,而它的很多内容则是在/var/spool/anacron里面保存。
**5.当anacron下达anacron -s cron.daily时,它会有如下的步骤:**
(1)由/etc/anacrontab分析到cron.daily这项工作名称的天数为一天。
(2)由/var/spool/anacron/cron.daily取出最近一次运行anacron的时间戳。
(3)把取出的时间戳与当前的时间戳相比较,如果差异超过了一天,那么就准备进行命令。
(4)若准备进行命令,根据/etc/anacrontab的配置,将延迟65分钟。
(5)延迟时间后,开始运行后续命令,也就是run-parts /etc/cron.daily这串命令。
(6)运行完毕后,anacron程序结束。
**6. crontab调用anacron**
1)/etc/cron.d/0hourly
/etc/cron.d目录
cron进程执行时,就会自动扫描该目录下的所有文件,按照文件中的时间设定执行后面的命令。
```
[root@localhost cron.d]# vi 0hourly
#nacron Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly
```
2)/etc/cron.hourly
```
[root@localhost cron.hourly]# ls
0anacron
[root@localhost cron.hourly]# vi 0anacron
#!/bin/sh
# Check whether 0anacron was run today already
if test -r /var/spool/anacron/cron.daily; then
day=`cat /var/spool/anacron/cron.daily`
fi
if [ `date +%Y%m%d` = "$day" ]; then
exit 0;
fi
# Do not run jobs when on battery power
if test -x /usr/bin/on_ac_power; then
/usr/bin/on_ac_power >/dev/null 2>&1
if test $? -eq 1; then
exit 0
fi
fi
/usr/sbin/anacron -s //调用
```
如上脚本所示,会按照天去检查是否有未执行的定时任务
- Linux
- 高级
- 杀毒
- 记一次中毒事件
- clamav查毒软件
- 处理挖矿病毒
- 定时任务
- kill
- chattr文件保护
- 运行级别
- Linux启动
- 文件加密
- ssh免密登录
- .ssh
- 问题
- 脚本
- 阿里云域名解析
- yum源
- 时间同步
- keepalived实现高可用
- dos字符与unix字符
- 大文件上传
- 基础
- proc目录
- 设置宋体
- 基础命令_01
- 基础命令_02
- SELinux
- 文件描述符
- 基础命令_03
- awk
- 系统日志
- date命令
- bc命令
- lsof
- vim快捷键
- shell
- 循环控制
- expr
- 执行脚本的方式
- declare
- shell脚本
- 控制启停脚本
- 数值计算
- centos
- 配置网络
- 环境
- 灰度环境
- ansible
- 模块
- 语法
- file模块
- setup模块
- ping模块
- copy模块
- command模块
- shell模块
- service模块
- cron模块
- yum模块
- user 模块
- group模块
- 指定用户
- playbook
- 实例
- ansible安装
- Jenkins
- shell部署
- 导入已有项目的配置
- 执行shell
- tungsten数据同步
- 防火墙
- netfilter