# Crond介绍
[TOC]
Crond是Linux系统中用来定期执行命令或制定程序任务的服务,通过`crontab`我们可以在固定的间隔时间执行指定的系统指令或shell script脚本,适合周期性的日志分析或者数据备份,时间间隔的耽误可以是分、时、日、月、周以及以上任意组合。
Linux任务调度的工作分为以下两类:
1. 系统自身执行的工作:系统周期性执行的任务工作,如轮询系统日志,备份系统数据,清理缓存。
2. 用户执行的工作过:某个用户定期要做的任务工作,例如每隔十分钟同步互联网的时间。
## 语法
crontab [-u sysUser] file.sh
crontab [-u user] [-l|-r|-e]
### 使用者权限文件
|文件|说明|
|-|-|
|`/etc/cron.deny`|该文件中所列用户不允许使用crontab命令|
|`/etc/cron.allow`|该文件中列出用户允许使用crontab命令|
|**`/var/spool/cron/`**|所有用户crontab文件存放的目录,以用户名命名|
### 语法含义
|参数名称|含义|指定示例|
|-|-|-|
|**`-l`**|显示用户`crontab`文件内容。|`crontab -l`|
|**`-e`**|进入vi编辑用户crontab文件|`crontab -e`|
|`-i`|删除用户crontab文件前确定提示|`crontab -i`|
|`-r`|从crontab目录中删除用户crontab文件|`crontab -r`|
|-u sysUser|指定使用者|`crontab -u root -l`|
### 指定时间格式
默认情况下,用户所建立的crontab文件存放于`/var/spool/cron`中,其crontab对应的文件名与用户名一致。
格式分为七段,前五段为时间设定段,第六段为以那个用户执行crontab(默认当前操作用户),第七段为索要执行的命令段。
格式如下:
~~~
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * * root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.momthly
~~~
#### crontab时间段的含义
|段|含义|取值范围|
|-|-|-|
|第一段|代表分钟|00~59|
|第二段|代表小时|00~23|
|第三段|代表日期|01~31|
|第四段|代表月份|01~12|
|第五段|代表星期几,0表示星期日|0~6(方便记忆忽略7)|
#### 特殊符号含义
|特殊符号|含义|
|-|-|
|*|表示任意时间都执行,如`00 23 * * * commond`表示无论何月何日和周的23:00都执行任务|
|-|减号表示分隔符,表示一个时间段,如`00 17-19 * * * commond`表示17~19点每小时的00分执行任务|
|,|表示分割时段,如`30 17,18,19 * * * commond`表示每天的17点、18点和19点的半点时刻执行任务|
|/n|n代表数字,即“每隔n单位hi件”如`*/10 * * * * commond`表示每10分钟执行一次任务(其中*/10也可以写成0-59/10)|
### crontab依赖的服务
~~~
[root@localhost.localdomain ~]
# chkconfig --list|grep crond
crond 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
[root@localhost.localdomain ~]
# /etc/init.d/crond status
crond (pid 7087) 正在运行...
[root@localhost.localdomain ~]
# /etc/init.d/crond restart
停止 crond: [确定]
正在启动 crond: [确定]
~~~
## 实例
1. **`30 3,12 * * * /bin/bash /scripts/backup.sh`**
每天凌晨3点个中午12点半的时刻(或者每天凌晨3:30和中午12:30)执行任务
2. **`30 */6 * * * /bin/bash /scripts/backup.sh`**
每隔6个半小时执行任务
3. **`30 8-18/2 * * * /bin/bash /scripts/backup.sh`**
早晨8点到下午18点之间每个2个半小时执行任务
4. **`30 21 * * * /bin/bash /scripts/backup.sh`**
每晚21:30执行任务
5. **`45 4 1,10,22 * * /bin/bash /scripts/backup.sh`**
每月1,10,22日的凌晨4:45执行任务
6. **`10 1 * * 60 /bin/bash /scripts/backup.sh`**
每周六、日的凌晨1:10分执行任务
7. **`0,30 18-23 * * * /bin/bash /scripts/backup.sh`**
每天18:00至23:30之间每隔30分钟执行任务
8. **`00 */1 * * * /bin/bash /scripts/backup.sh`**
每隔一小时整点执行任务
9. **`* 23-7/1 * * * /bin/bash /scripts/backup.sh`**
*晚上23点到早上7点之间,每小时的每分钟都执行任务*
10. **`0 11 * 4 1-3 /bin/bash /scripts/backup.sh`**
4月的每周一到周三的11点执行任务
## crontab命令的专业写法
**例:**每分钟打印自己的名字到/server/log/自己的名字命名的文件中
~~~
# print char test by curder for programer A at 2015-10-20
*/1 * * * * echo 'curder'>>/server/log/curder.log 2>&1
~~~
**说明:**
1. 写定时任务要写清楚注释,如:谁,什么时间,因为谁,做了什么事
2. 执行任务时可以省略用户,在执行脚本时,尽量加上 `/bin/bash`(可能因为脚本没有执行权限而无法执行)
3. 需要root权限执行的任务可以登录到root用户下然后设置,如果不需要root权限,可以登录到普通用户下,然后设置,最后在脚本中将环境变量重新export一下
4. 定时任务命令的结尾最好加上`>/dev/null 2>&1`等内容。`2>&1`使标准错误和标准输出一样,本命令即把脚本的输出重定向到/dev/null,即不记录任何输出,也不给系统发邮件
5. 在开发定时任务程序或者脚本时,在调试脚本成功后,应尽量把debug及屏幕输出的内容的命令去掉,如果需要可以定向到日志里。
- Linux的安装
- Linux的软件安装管理
- Linux零碎的命令
- 了解ssh
- 系统调优及安全设置
- Linux系统中的硬链接和软连接
- Linux文件和目录的属性及权限
- 命令总结
- 文件目录管理命令
- cat
- cd
- cp
- ls
- mkdir
- mv
- rm
- touch
- vi
- 硬件检测内核shell命令
- echo
- alias
- dd
- diff
- date
- grep(重要)
- head
- rpm
- sed(重要)
- tree
- unalias
- yum
- seq
- su
- less
- more
- tail
- awk(重要)
- pwd
- history
- whoami
- find(重要)
- which
- vimdiff
- sudo
- wget
- ln
- chmod
- chown
- vim常用技巧
- scp
- 工作场景应用总结
- 自动删除n天前日志
- 删除一个目录下的所有文件但保留一个文件
- Linux软件安装
- php安装(apache版本)
- vsftpd安装
- git安装
- python安装
- LNMP安装
- LAMP安装I
- LAMP安装II
- svn安装
- svn在Linux下的命令操作
- svn钩子简介
- svn代码上传流程
- Crond介绍
- sersync应用指南
- 其他
- 小结一
- 系统调优重新整理tmp
- linux禁止root用户直接登录sshd并修改默认端口