任务计划

若希望在固定时间触发某个作业,就需要创建任务计划,按时执行该作业

cron实现任务计划方式

  1. 可通过修改/etc/crontab文件
    root用户通过修改/etc/crontab文件可以实现任务计划,而普通用户却无法修改
  2. 使用crontab命令实现
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 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

内容 描述
minute 分钟,0~59之间的任何整数
hour 小时,0~23之间的任何整数
day 日期,从 1~31之间的任何整数(如果指定了月份,必须是该月份的有效日期)
month 月份,1~12之间的任何整数(或使用月份的英文简写如jan、feb等
day of week 星期,0~7之间的任何整数,这里的0或7代表星期日(或使用星期的英文简写如sun、mon等)
user-name 执行命令的用户
command 要执行的命令或者是自己编写的脚本

时间格式 描述
* 可以用来代表所有有效的值。如月份值中的星号意味着在满足其它制约条件后每月都执行该命令
- 指定一个整数范围。比如1-4意味着整数1、2、3、4
, 指定隔开的一系列值指定一个列表。比如3,4,6,8标明这4个指定的整数
/ 可以用来指定间隔频率。在范围后加上/<integer>意味着在范围内可以跳过integer。如“0-59/2”可以用来在分钟字段上定义时间间隔为两分钟。间隔频率值还可以和星号一起使用,如“*/3”的值可以用在月份字段中表示每3个月运行一次任务。</integer>

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

//在每星期六的23:00执行 /root/backup.sh
0 23 * * 6 root /root/backup.sh

//在每天18:00~23:00之间每隔30分钟执行/root/backup.sh
0,30 18-23 * * * root /root/backup.sh

//每隔2月,在晚上的21:30执行/root/backup.sh文件
30 21 * */2 * root /root/backup.sh

backup.sh文件(备份文件)

#!/bin/bash
#对/boot目录进行备份,备份文件名称包括备份时具体时间

tar -zcvf ~/boot _$(date -d "today" +"%Y%m%d_%H%M").tar.gz /boot

每天晚上1:00读取/var/log/auth.log文件的后100行内容追加到文件/root/auth.log

0 1 * * * root tail -100 /var/log/auth.log >> /root/auth.log

普通用户任务计划

root以外的用户可用crontab命令配置cron任务

  1. 登录然后输入crontab -e命令
  2. 编辑crontab,编辑格式和/etc/crontab相同
  3. 当对crontab所做的改变被保存后(输入:wq),该crontab文件会根据该用户名被保chun在 /var/spool/cron/<username> 文件中</username>

crond守护进程工作

1.每分钟都检查/etc/crontab文件、/etc/cron.d目录以及/var/spool/cron目录中的变化。
2.如果发现了改变,它们就会被载入内存

列出crontab

以root用户列出ruby的crontab

root@ubuntu ~# crontab -u ruby -l

以普通用户ruby列出自己的crontab

ruby@ubuntu ~$ crontab -l