Linux中定时任务一般分为两种,短期的和周期的任务。
at,atq,atrm命令
启动atd服务:
[root@linux ~]# /etc/init.d/atd restart
Stopping atd: [FAILED]
Starting atd: [ OK ]
# 设定一下开机时就启动
[root@linux ~]# chkconfig --level 35 atd on
at命令用于指定只执行一次的任务。它的工作流程如下:
- 查看/etc/at.allow和/etc/at.deny两个文件,判断用户是否可以使用at;
- 若两个文件都不存在,就只有root用户可以使用at命令。
若不想某一用户使用at命令,可以在/etc/at.deny中添加用户账号。
[root@linux ~]# at [-m] TIME
参数:
-m :当 at 的工作完成后,以 email 的方式通知使用者该工作已完成。
TIME:什么时候执行工作
TIME的时间格式有:
时间格式 | 描述 | 例子 |
---|---|---|
HH:MM | 在HH:MM时刻执行 | ex> 04:00 |
HH:MM YYYY-MM-DD | 在某年某月某天某时刻执行 | ex> 04:00 2020-03-03 |
HH:MM[am|pm] [Month] [Date] | 在某年某月某天某时刻执行 | ex> 04pm December 3 |
HH:MM[am|pm] + number [minutes|hours|days|weeks] | 在某一个时间点再加上一段时间 | ex> now + 5 minutes ex> 04pm + 3 days |
实例:
#5分钟后将/root/.bashrc寄给root这个用户
[root@localhost at]# at now + 5 minutes
at> /bin/mail root -s 'test' < /root/.bashrc
at> <EOT> #ctrl+d结束
job 1 at 2020-02-10 13:17 #第一个任务在这个时间点完成
与at相关命令atq和atrm,用于移除任务:
#查看有多少个at命令
[root@localhost at]# atq
2 2020-02-10 13:23 a root
#移除第2个工作项
[root@localhost at]# atrm 2
#没有任何信息,表示工作被移除
[root@localhost at]# atq
crontab命令
crontab是用来定义周期性的任务的,与at相同的是用户是否可以使用参考/etc/cron.allow和/etc/cron.deny文件。
[root@linux ~]# crontab [-u username] [-l|-e|-r]
参数:
-u :只有 root 才能进行这个任务,亦即帮其它使用者建立/移除 crontab;
-e :编辑 crontab 的工作内容
-l :查阅 crontab 的工作内容
-r :移除 crontab 的工作内容
实例:
[dmtsai@linux ~]$ crontab -e
# 此时会进入 vi 的编辑画面让您编辑工作!注意到,每项工作都是一行。
0 12 * * * mail dmtsai -s "at 12:00" < /home/dmtsai/.bashrc
#分 时 日 月 周 |<==============指令串========================>|
时间参数的设定:
时间参数 | 数字范围 |
---|---|
分钟 | 0-59 |
小时 | 0-23 |
日期 | 1-31 |
月份 | 1-12 |
周 | 0-7,0和7都代表周日 |
还有一些特殊字符:
特殊字符 | 代表意义 |
---|---|
* | 代表任何时刻,若周、月、日都是*,表示不论何月何周何日都执行后续指令 |
, | 代表分隔时段的意思 0 3,6 * * * command 表示3点和6点执行 |
- | 代表一段时间范围 20 8-12 * * * command 表示8点到12点之间每20分钟执行一次 |
/n | 每隔n单位间隔 */5 * * * * command 表示每隔5分钟一次 |
除了使用crontab -e之外,还可以直接编辑/etc/crontab文件来设定定时任务。cron这个服务每分钟回去读取一次/etc/crontab和/var/spool/cron里面的数据,自动执行任务。
[root@localhost at]# 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
# | | | | |
# * * * * * user-name command to be executed
在/etc/crontab中下达指定有两种方式,一是直接写下指令,一是使用目录来规划:
- 指令型态
01 * * * * dmtsai mail -s "testing" kiki < /home/dmtsai/test.txt
#以 dmtsai 这个使用者的身份,在每小时执行一次 mail 指令。
- 目录规划
*/5 * * * * root run-parts /root/runcron
#建立一个 /root/runcron 的目录,将要每隔五分钟执行的可执行文件都写到该目录下, 就可
#以让系统每五分钟执行一次该目录下的所有可执行文件
相对于crontab -e命令,直接编辑/etc/crontab进行指令的下达会更加方便一点。