任务计划
若希望在固定时间触发某个作业,就需要创建任务计划,按时执行该作业
cron实现任务计划方式
- 可通过修改/etc/crontab文件
root用户通过修改/etc/crontab文件可以实现任务计划,而普通用户却无法修改 - 使用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任务
- 登录然后输入crontab -e命令
- 编辑crontab,编辑格式和/etc/crontab相同
- 当对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