延时任务
概念
-
at命令可以指定某一任务在将来的特定时间运行。该作业可能是一次备份,对您系统的检查或者特定时间发送的通知。那些需要花费很长时间才可以完成的作业正适合at命令。仅需要使用at命令即任务设置为在一分钟或者两分钟之后运行。然后您便可以安全注销,因为该任务会在与shell会话断开连接的情况下运行。
-
at命令操作格式:在输入at命令之后,'ENTER’继续键入作业中包含的其他命令,任务可由多个命令组成。在完成键入要运行的命令时,在单独出现的一行’ctrl+d’完成任务。
[root@example]$ at 指定时间 #定时任务,指定时间
at>在这里插入任务命令1 #插入1条或多条命令
at>在这里插入任务命令2
at>在这里插入任务命令n
at><EOT> #Ctrl+D结束指定
job 1 at Mon Oct 21 8:35:00 2019 #延时任务编号,执行时间等信息
- 时间概念
区分 | 定义 | 格式 |
---|---|---|
绝对时间 | 具体的时间或者日期 | 1.当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行 2.使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间 3.采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午 4.指定命令执行的具体日期,指定格式为month-day(月 )日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)或mmddyy(月日年)或yy-mm-dd(年-月-日)。指定的日期必须跟在指定时间的后面。 |
相对时间 | 当前时间的相对时间 | 格式:now + count time-units 例如now + 1min #1分钟以后 now就是当前时间 count是时间计数,究竟是几天,还是几小时 time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期) 更有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。 |
at命令
at [选项] [job号]
at -l #查看延时任务列表,显示具体job号和job内容
at -c job号 #根据job号,查看job号对应的任务内容
at -r job号 #根据job号,取消对应job号任务内容
黑白名单
名称 | 文件位置 | 系统生成 | 意义 |
---|---|---|---|
黑名单 | /etc/at.deny | 默认自动生成 | 名单中的用户不能使用at命令 |
白名单 | /etc/at.allow | 默认不存在,需要手动添加,添加后优先级高于黑名单 | 仅名单中的用户可使用,root用户默认可使用 |
vim /etc/at.deny #添加格式如下
tom #添加用户tom
harry #添加用户harry
leo #添加用户leo
...... #可添加多个
定时任务
概念
- crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
- Linux下的任务调度分为两类:系统级别和用户级别
- 用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。
- 系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。
- 任务格式
* * * * * command(必须是绝对路径)(而且必须有执行权限x)
#第一个* 表示分钟 0-59
#第二个* 表示小时 0-23
#第三个* 表示天 1-31
#第四个* 表示月 1-12
#第五个* 表示周 0-7
#command:必须是绝对路径)(而且必须有执行权限x)
* * * * * command
#'*'(星号) 代表任何时间。第一个"*"就代表一小时种每分钟都执行一次的意思。
0 1,3,5 * * * command
#','(逗号) 代表不连续的时间。代表在每天的 1 点 0 分、3 点 0 分、5 点 0 分都执行一次命令。
0 4 * * * 1-3 command
#'-'(中杠) 代表连续的时间范围。代表每周一到周三的凌晨 4 点 0 分执行命令。
*/10 * * * * command
#'/'(正斜线) 代表每隔多久执行一次。代表每隔 10 分钟就执行一次命令。
用户级别
配置文件
路径:var/spool/cron/用户名
文件:用户名命名的文件是此用户的crontab服务配置文件
命令操作
crontab [选项]
-u user #用来设定某个用户的crontab服务,例如'-u demo'表示demo用户的crontab服务,此选项一般有root用户来运行。
-e #编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户。
-l #显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户。
-r #从/var/spool/cron删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的crontab文件。
-i #和-r联合使用,在删除用户的文件时,提示确认信息。
黑白名单
名称 | 文件位置 | 系统生成 | 意义 |
---|---|---|---|
黑名单 | /etc/cron.deny | 默认自动生成 | 名单中的用户不能使用crontab命令 |
白名单 | /etc/cron.allow | 默认不存在,需要手动添加,添加后优先级高于黑名单 | 仅名单中的用户可使用命令,root用户默认可使用 |
系统级别
配置文件
- 添加脚本系统自动执行,系统给出了3种执行时间目录
/etc/cron.hourly/ #将执行脚本放入此目录中,系统每小时自动执行
/etc/cron.daliy/ #将执行脚本放入此目录中,系统每天自动执行
/etc/cron.weekly/ #将执行脚本放入此目录中,系统每周自动执行
/etc/cron.monthly/ #将执行脚本放入此目录中,系统每月自动执行
- 添加脚本及crontab配置文件
/etc/cron.d/ #将crontab配置文件放入其中,并写好规则,crond服务会读取此目录文件