之前记录博客有介绍crontab的使用,crontab是周期性执行某一项任务,如每周一的8点固定给用户发送周刊读物,或者每天凌晨三点执行备份数据库的脚本,这些都是带有规律的周期性执行任务。而今天介绍的at命令与crontab不同,linux的at命令只是在固定的时间执行任务一次,即单次执行的任务。
检查at服务的启动状态
/etc/init.d/atq status 可检查服务的运行状态。
启动atq
执行:atq
at格式:
at #执行的时间#
at->#执行的任务脚本#
at->#执行的任务脚本#
at->
在命令行输入at,然后指定执行的时间,在输入enter键换行,接下来输入要执行的任务,多任务继续输入enter键换行隔开。输入的任务完毕,此时按下ctrl+d,则会出现“at-> ”,此时输入完毕。屏幕底下会出现类似“job 3 at 2018-01-14 12:17”的字样,证明任务指定成功。
下面看实例:
指定执行时间,今天的12:17分将时间写入到index文本中。
再通过vim命令打开index.html文件。我们可以看到时间已经写入到index.html文件里了。
需要特地说明一下,上面输入执行的12:17分,如果当天时间已经过了,则会在第二天12:17分执行。
例如当前时间为12:20,如果输入一个12:00执行的任务,则会在输入命令后,提示第二天执行:
也可以使用相对时间,如一分钟以后执行任务
再试试未来的绝对时间,如2018年1月15日凌晨执行任务
以上我们就基本掌握了at命令的执行方法。at指定的时间还有很多,比如指定teatime,就是下午的4点执行。但是最常用的就是上面列出的。设置了任务,还可以查看任务。
列出当前待执行的任务,atq:
取消待执行列表中的任务,使用atrm 任务编号:
作者:rightchen
链接:
https://www.jianshu.com/p/bda9429811da來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
来自 https://www.jianshu.com/p/bda9429811da
在Linux下,有两个命令可以用来作为计划任务而执行,
at:一次性定时任务计划执行
crontab :每天定时任务计划执行
以下仅说一下一次性任务计划执行(at)
要使用一次性任务计划,linux必须要有负责这个计划任务的五福,那就是atd服务
但是并非所有的linux distribution都默认会打开,我们需要手动激活爱听的任务
#:/etc/init.d/atd start
#:/etc/init.d/atd stop
atd服务启动支持用法:/etc/init.d/atd {start|stop|restart|crondrestart|status}
出现如下服务,证明系统未安装爱听的服务,如图:
我们需要手动安装
#:yum install - y at
#:apt-get install at
启动服务:
#:/etc/init.d/atd start
如果担心启动是否执行OK的话,可使用命令查看:
#;ps aux |grep atd
at 命令参数
at [参数] [时间]
-m:当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出
-I:atq的别名
-d:atrm的别名
-v:显示任务将被执行的时间
-c:打印任务的内容到标准输出
-V:显示版本信息
-q:使用指定队列
-f:从指定文件读入任务,而不是从标准输入读入
-t:一时间参数的形式提交要运行的任务
at时间格式:
HH:AM
ex>04:00 #在今日的HH:MM是可执行,弱势该是可以超过,在在明天的此时可执行
HH:MM YYYY-MM-DD
ex>04:00 2016-03-17
强制规定在某年某月的某一天的特殊时刻进行该任务
HH:MM[am|pm] [Month] [date]
ex>04pm March 17
强制在某年某月的的某时刻进行该任务
HH:MM[am|pm] + number [minutes|hours|days|weeks]
ex>now + 5 minutes
ex<04pm + 3days
某个时间点再加几个事件后才执行该任务
使用实例:
1.三天后的下午5点执行/bin/ls
#:at 5pm+3 days
at>/bin/ls
at>按ctrl+D
2.明天17点钟,输出时间到指定文件内
#:at 17:00 tomorrow
at>date>/tmp/2016.log
at>按ctrl+D
3.使用atq查看系统没有执行的工作任务
#:atq
4.删除已经设定的任务
#:atq
#atrm 任务号
#atq
5.显示已经设定的任务内容
#:at -c 任务号
中间省略N多
atd设置开机启动:
#:chkconfig atd on #当前用户
#chkconfig --level 2345 atd on #修改服务器的默认启动等级
at命令的安全问题:
如何达到at命令的使用可控,这是一个问题,不过我哦们可以使用
/etc/at.allow 与 /etc/at.deny
来对at的使用进行限制,其工作原理如下:
先寻找/etc/at.allow,写入这个文件的使用者能用,没有在此文件中的则不能使用(即使没有写在/etc/at.deny中)
如果没有/etc/at.allow不存在,寻找/etc/at.deny文件,写在此文件中的使用者不能使用,而没有在此文件中的使用者,就可以使用
如果两个文件读不存在,那么只有root可以使用at命令。
一般情况下。allow的管理较为严格,deny则较为松散
一般情况下,按章完成后系统通常会保留一个空的/etc/at/deny文件,仪式是允许所有人使用,如果不希望某人使用的话,直接把使用者的账户跳入/etc/at.deny里面即可。注意:一个账号一行
AT命令是Windows XP中内置的命令,它也可以媲美Windows中的“计划任务”,而且在计划的安排、任务的管理、工作事务的处理方面,AT命令具有更强大更神通的功能。AT命令可在指定时间和日期、在指定计算机上运行命令和程序。
注意:必须正在开启Task scheduler服务才能使用 at 命令。可以在命令窗口中输入net start schedule启动它,
停止则使用net stop schedule
1. 具体功能
Windows NT Server 的服务程序管理器只能设置某项服务的启动方式(自动、手动、失效),而在日常管理工作中,常常要求某项服务能定时开启、关闭。 Windows NT Server 提供的 AT 命令能够实现这一点。利用它可实现 RAS服务定时开关, 其具体步骤如下:
a. 在 “ 设置 ”---“ 控制面板 ”---“ 管理工具 ”---“ 服务 ”中启动 Schedule 服务,并将其启动方式属性设置为自动。
b. 在命令窗口中使用 AT 命令设置服务程序的定时启动关闭。
2. 语法详解
AT [\\computername] time [/interactive] [/every:date[, ]|next:date[, ]] ″command″
3. 参数说明 :
无参数: 显示所有已设置的计划命令情况。
\\computername : 指示执行该命令的计算机名,如省略则在本机执行。
time : 命令执行时间 , 将时间以 24 小时标记( 00:00 [ 午夜 ]到 23:59 )的方式表示为小时:分钟
/interactive : 当程序执行时是否与正在登录的用户进行交互。
/every:date[, ] : 指定程序执行的日期 ,将 date 指定为星期的一天或多天 (M,T,W,Th,F,S,Su) ,或月的一天或多天(使用 1 到 31 的数字)。用逗号分隔多个日期项。如果省略了 date ,将假定为该月的当前日期。
next:date[, ] : 指定程序下一次执行的日期。
″command″ : 定时执行的 命令、程序( .exe 或 .com )或批处理程序( .bat 或 .cmd )。当命令需要路径作为参数时,请使用绝对路径,也就是从驱动器号开始的整个路径。如果命令在远程计算机上,请指定服务器和共享名的 UNC 符号,而不是远程驱动器号。 如果命令不是可执行 (.exe) 文件,必须在命令前加上 cmd /c ,例如: cmd /c dir > c:\test.out
AT [\\computername] [[id][/delete][/yes]]
参数含义:
id : 分配给计划命令的识别号码,可由不带参数的 AT 命令查到。
/delete : 取消指定的计划命令,如果 id 省略的话,取消所有的计划命令。
/yes : 强制对所有的取消询问回答 yes 。
4. 例举说明
例子 1 :查看 at 所有参数
例子 2 :每日 19 : 00 启动,次日 7 : 30 关闭 RAS 服务的命令
例子 3 :先停止计划任务、然后再启动计划任务
例子 4 :到了 12:42 ,电脑会出现 “ 系统关机 ” 对话框,并默认 30 秒延时自动关机
at 12:42 ShutDown –S –T30
例子 5:向192.168.1.6定时提醒“与朋友约会的时间到了,快点准备出发吧!”
at 12:00 Net Send 192.168.1.6与朋友约会的时间到了,快点准备出发吧!
例子 6:在每,周六早上一点,电脑定时启动My_BackUp.bat批处理文件
at 1:00AM /Every:Saturday My_BackUp.bat
例子 7:删除标识编号为5的计划任务
at 5 /Delete
下面说明shutdown.exe的参数使用
Shutdown.exe的参数,每个都具有特定的用途,执行每一个都会产生不同的效果,比如“-s”就表示关闭本地计算机,“-a”表示取消关机操作,下面列出了更多参数,大家可以在Shutdown.exe中按需使用。
-f:强行关闭应用程序
-m \\计算机名:控制远程计算机
-i:显示图形用户界面,但必须是Shutdown的第一个选项
-l:注销当前用户
-r:关机并重启
-t时间:设置关机倒计时
-c "消息内容":输入关机对话框中的消息内容(不能超127个字符)
at:计划任务,在特定的时间执行某项工作,在特定的时间执行一次。
格式:at+时间
例1:date //查看系统当前时间
at 时间 //系统计划启动任务时间
at> date >/root/1.txt //date:系统计划启动任务时间执行date命令;/root/1.txt执行命令写入位
置和文件
ctrl+d退出 //退出at命令
例2:date //查看系统当前时间
at 时间 //系统计划启动任务时间
at> init 0 /root/2.txt //init 0:系统计划启动任务时间执行init 0(关机)命令;/root/2.txt执
行命令写入位置和文件
例3:在固定时间内添加一个用户(这时建立的用户没有密码)
#at 12:00(时间) //at命令设定12:00执行一项操作
at>useradd aaa //在at命令里设定添加用户aaa
ctrl+d //退出at命令
tail -f /etc/passwd //查看/etc/passwd文件后十行是否增加了一个用户aaa
计划任务结束后,查看任务是否写入文件中,可以用cat或vi命令查看。
格式:cat(vi)+(路径)文件名
例1:cat(vi) 1.txt
日 2月 6 09:21:28 CST 2005
计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务。
格式:atq
例:atq
1 2005-02-06 09:23 a root
启动计划任务后,如果不想启动设定好的计划任务可以使用atrm命令删除。
格式:atrm+任务号
例:at rm 1 //删除计划任务1
atq //查看计划任务是否删除
还可以进入到/var/spool/at目录里把计划任务删除,计划任务的文件都保存在该目录里,可以用rm -f
文件名来删除(以文件的形式删除计划任务,因为计划任务是以文件形式保存在该目录中)
例:#cd /var/spool/at //进入到/var/spool/at目录中
ls //显示目录中所有文件
rm -f a0000a0119b0df //删除计划任务
在通常情况下,超级用户都可以使用这个命令。对于其他用户来说,能否可以使用就取决于两个文
件:/etc/at.allow和/etc/at.deny。
当“用户名”写入/etc/at.deny中,用户不能执行at命令(管理员限制用户使用at命令)。
例:useradd text //新建一个text用户
ls /etc/at.deny //查看at.deny文件内容
vi /etc/at.deny //对at.deny文件进行编辑
text //对at.deny文件进行编辑,写入text用户名,进行at命令限制,然后wq(保存退出)
cat /etc/at.deny //显示at.deny文件内容
su - text //切换到text用户
at 12:00 //text用户执行at命令,如果被限制则出现下面的提示。
You do not have permission to use at.你不允许使用at这个命令
at.allow比at.deny优先级高
at.allow文件中有的用户可以执行at,没有则不能。
linux操作系统在执行用户是否可以执行at命令时,先看at.allow文件没有才看at.deny文件。
注意:linux操作系统默认没有/etc/at.allow文件。
例:ls /etc/at.allow //查看是否已经建立at.allow文件
touch /etc/at.allow //建立/etc/at.allow文件
vi /etc/at.allow //对at.allow文件进行编辑
text //对at.allow文件进行编辑,写入text用户名,该用户名可以执行at命令,然后wq(保存退出
)。
su - text //切换到text用户
at 12:00 //text用户执行at命令,若不出现上面所说的提示就可以进行at命令设定了。
at命令格式
at HH:MM YYYY-MM-DD //HH(小时):MM(分钟) YYYY(年)-MM(月份)-DD(日)
例:at 4:00 2004-11-27
HH[am pm]+D(天) days //HH(小时)[am(上午)pm(下午)]+days(天)
例:4pm + 3days :3天以后下午4:00执行at命令设定的计划任务
来自 https://www.cnblogs.com/klb561/p/9160174.html
linux中at命令详解
at命令:
一:简介:
计划任务,在特定的时间执行某项工作,在特定的时间执行一次,需要安装at服务,apt-get install at
二:时间定义:
at允许使用一套相当复杂的指定时间的方法。
● 能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。 例如:04:00
● 能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。
● 能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。 例如:12pm
● 能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。 例如:04:00 2009-03-1
● 能够使用相对计时法。指定格式为:now + count time-units ,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,几天,几小时。 例如:now + 5 minutes 04pm + 3 days
● 能够直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。
三:语法:
at(选项)(参数)
四:选项:
-m:当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出
-M:不发送邮件
-l:atq的别名
-d:atrm的别名
-r:atrm的别名
-v:显示任务将被执行的时间,显示的时间格式为:Thu Feb 20 14:50:00 1997
-c:打印任务的内容到标准输出
-V:显示版本信息
-q:后面加<队列> 使用指定的队列
-f:后面加<文件> 从指定文件读入任务而不是从标准输入读入
-t:后面<时间参数> 以时间参数的形式提交要运行的任务
五:相关命令:
● at:在特定的时间执行一次性的任务
● atq:列出用户的计划任务,如果是超级用户将列出所有用户的任务,结果的输出格式为:作业号、日期、小时、队列和用户名
● atrm:根据Job number删除at任务
● batch:在系统负荷允许的情况下执行at任务,换言之,就是在系统空闲的情况下才执行at任务
六:参数:
日期时间:指定任务执行的日期时间
对队列的补充:
● -q选项后面跟上队列名称将使用指定的队列执行at任务
● 队列名称只包含一个字母,有效的队列名称取值范围是:小写字母a-z或大写字母A-Z
● 在默认情况下a队列作为at命令的默认队列,b队列作为batch命令的默认队列
● 越大的字母在执行时拥有越高的优先级
● "="是作为特殊队列保留给当前运行的at任务使用的
● 如果在创建at计划任务是使用大写字母指定任务的队列,该任务在执行的时候将被当做batch计划任务处理
● 使用atq查询at任务时如果指定了队列名称,查询的结果只会包含这个队列下的任务
对-t选项的补充:
● -t选项的作用是在指定的time_arg时间参数对应的时刻执行at任务
● 这个参数后面的时间的格式必须和touch命令-t选项所需的时间的格式一致
● time_arg的格式为[[CC]YY]MMDDhhmm[.ss]
CC 指定年份的前两位数字
YY 指定年份的后两位数字
MM 指定一年的哪一月(从 01 到 12)
DD 指定一月的哪一天(从 01 到 31)
hh 指定一天中的哪一小时(从 00 到 23)
mm 指定一小时的哪一分钟(从 00 到 59)
ss 指定一分钟的哪一秒(从 00 到 59)
七:相关配置文件:
● 时间规范的确切定义可以在/usr/share/doc/at-3.1.10/timespec中查看
● 默认情况下计划任务都是放在/var/spool/at/这个文件
● root用户可以在任何情况下使用at命令,而其他用户使用at命令的权限定义在/etc/at.allow(被允许使用计划任务的用户)和/etc/at.deny(被拒绝使用计划任务的用户)文件中
● 如果/etc/at.allow文件存在,只有在该文件中的用户名对应的用户才能使用at
● 如果/etc/at.allow文件不存在,/etc/at.deny存在,所有不在/etc/at.deny文件中的用户可以使用at
● at.allow比at.deny优先级高,执行用户是否可以执行at命令,先看at.allow文件没有才看at.deny文件
● 如果/etc/at.allow和/etc/at.deny文件都不存在,只有root用户能使用at
● 一个空内容的/etc/at.deny表示任何用户都能使用at命令,这是默认的配置
● 一般情况下这两个文件存在一个即可。如果只有少数几个用户需要使用计划任务,那么就保留at.allow文件,如果大部分用户都要使用计划任务,那么保留at.deny即可
八:创建at任务:
创建at任务方式有两种,从文件输入和从控制台输入。以下分别用两种方式创建1分钟后将当前时间写入 /root/learngit 文件的命令
1. 文件输入:
2. 控制台输入:
九:实例:
©著作权归作者所有:来自51CTO博客作者学习是乐趣的原创作品,如需转载,请注明出处,否则将追究法律责任
来自 http://blog.51cto.com/12822117/2121101
在指定的时间执行任务。
命令格式
at [-V] [-q queue] [-f file] [-mldbv] TIME
at [-V] [-q queue] [-f file] [-mldbv] -t time_arg
at -c job [job...]
命令参数
-V
在标准错误流上打印版本号
-q queue
使用指定的队列。一个队列以单一的字母命名,有效的命名范围是 a-z 和 A-Z。at 命令的缺省队列是 a,batch 命令的缺省队列是 b。字母的顺序越高,队列的优先级则越低。特殊队列 "=" 是为当前正在执行的任务而保留的。
-m
当任务完成时发送邮件给用户即使没有输出。
-f
从指定的文件而不是标准输出读取任务。
-l
列出当前用户的 at 任务列表。对与 root 用户,则列出所有用户的 at 列表。
-d
根据任务编号删除任务。
-v
显示任务将要执行的时间。
-c
连接命令行中列出的作业并输出到标准输出。
-t time_arg
指定任务的运行时间 time_arg。 time_arg 的格式为 [[CC]YY]MMDDhhmm。
实例
a) 10 分钟后执行任务
huey@huey-K42JE:~$ at now + 5 minutes
at> echo 'hello world' >> at.out
at> <EOT>
job 3 at Tue May 12 22:16:00 2015
b) 3 天后下午 4 点时执行任务
huey@huey-K42JE:~$ at 4pm + 3 days
at> echo 'hello world' >> at.out
at> <EOT>
job 4 at Fri May 15 16:00:00 2015
c) 7 月 31 号上午 10 点时执行任务
huey@huey-K42JE:~$ at 10am Jul 31
at> echo 'hello world' >> at.out
at> <EOT>
job 5 at Fri Jul 31 10:00:00 2015
d) 明天凌晨 1 点时执行任务
huey@huey-K42JE:~$ at 1am tomorrow
at> echo 'hello world' >> at.out
at> <EOT>
job 7 at Wed May 13 01:00:00 2015
e) 周三的下午 4 点时执行任务
huey@huey-K42JE:~$ at 4pm WED
at> echo 'hello world' >> at.out
at> <EOT>
job 8 at Wed May 13 16:00:00 2015
f) 在 2015-05-20 12:00:00 时执行任务
huey@huey-K42JE:~$ at -t "201505201200"
at> echo 'hello world' >> at.out
at> <EOT>
job 9 at Wed May 20 12:00:00 2015
g) 列出当前用户的 at 任务列表
huey@huey-K42JE:~$ atq
9 Wed May 20 12:00:00 2015 a huey
8 Wed May 13 16:00:00 2015 a huey
6 Tue May 12 22:21:00 2015 a huey
5 Fri Jul 31 10:00:00 2015 a huey
4 Fri May 15 16:00:00 2015 a huey
7 Wed May 13 01:00:00 2015 a huey
h) 删除编号为 6 的任务
huey@huey-K42JE:~$ atrm 6
相关命令
atq - 相当于 at -l
atrm - 相当于 at -d
batch - 当系统负载许可时,也就是平均负载量低于 0.8 时,执行任务。 其用法与 at 命令类似。
其他事项
来自 https://www.cnblogs.com/huey/p/4497154.html
每天一个linux命令:at命令
2017年02月14日 16:11:44 MR-GTT 阅读数:5970更多 在windows系统中,windows提供了计划任务这一功能,在控制面板 -> 性能与维护 -> 任务计划, 它的功能就是安排自动运行的任务。 通过’添加任务计划’的一步步引导,则可建立一个定时执行的任务。
在linux系统中你可能已经发现了为什么系统常常会自动的进行一些任务?这些任务到底是谁在支配他们工作的?在linux系统如果你想要让自己设计的备份程序可以自动在某个时间点开始在系统底下运行,而不需要手动来启动它,又该如何处置呢? 这些例行的工作可能又分为一次性定时工作与循环定时工作,在系统内又是哪些服务在负责? 还有,如果你想要每年在老婆的生日前一天就发出一封信件提醒自己不要忘记,linux系统下该怎么做呢?
今天我们主要学习一下一次性定时计划任务的at命令的用法!
1.命令格式:
at[参数][时间]
2.命令功能:
在一个指定的时间执行一个指定任务,只能执行一次,且需要开启atd进程(ps -ef | grep atd查看, 开启用/etc/init.d/atd start or restart; 开机即启动则需要运行 chkconfig –level 2345 atd on)。
3.命令参数:
-m 当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出
-I atq的别名
-d atrm的别名
-v 显示任务将被执行的时间
-c 打印任务的内容到标准输出
-V 显示版本信息
-q<列队> 使用指定的列队
-f<文件> 从指定文件读入任务而不是从标准输入读入
-t<时间参数> 以时间参数的形式提交要运行的任务
at允许使用一套相当复杂的指定时间的方法。他能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。当然也能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的 词语来指定时间。用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。 也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。 上面介绍的都是绝对计时法,其实还能够使用相对计时法,这对于安排不久就要执行的命令是很有好处的。指定格式为:now + count time-units ,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时,等等。 更有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。
TIME:时间格式,这里可以定义出什么时候要进行 at 这项任务的时间,格式有:
HH:MM
ex> 04:00
在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此任务。
HH:MM YYYY-MM-DD
ex> 04:00 2009-03-17
强制规定在某年某月的某一天的特殊时刻进行该项任务
HH:MM[am|pm] [Month] [Date]
ex> 04pm March 17
也是一样,强制在某年某月某日的某时刻进行该项任务
HH:MM[am|pm] + number [minutes|hours|days|weeks]
ex> now + 5 minutes
ex> 04pm + 3 days
就是说,在某个时间点再加几个时间后才进行该项任务。
4.使用实例:
实例1:三天后的下午 5 点执行 /bin/ls
命令:
at 5pm+3 days
输出:
[root@localhost ~]
at> /bin/ls
at> <EOT>
job 7 at 2013-01-08 17:00
[root@localhost ~]
说明:
实例2:明天17点钟,输出时间到指定文件内
命令:
at 17:20 tomorrow
输出:
[root@localhost ~]
at> date >/root/2013.log
at> <EOT>
job 8 at 2013-01-06 17:20
[root@localhost ~]
说明:
实例3:计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务
命令:
atq
输出:
[root@localhost ~]
8 2013-01-06 17:20 a root
7 2013-01-08 17:00 a root
[root@localhost ~]
说明:
实例4:删除已经设置的任务
命令:
atrm 7
输出:
[root@localhost ~]
8 2013-01-06 17:20 a root
7 2013-01-08 17:00 a root
[root@localhost ~]
[root@localhost ~]
8 2013-01-06 17:20 a root
[root@localhost ~]
说明:
实例5:显示已经设置的任务内容
命令:
at -c 8
输出:
[root@localhost ~]
#!/bin/sh
umask 22此处省略n个字符
date >/root/2013.log
[root@localhost ~]
说明:
5.atd 的启动与 at 运行的方式:
5.1 atd 的启动
要使用一次性计划任务时,我们的 Linux 系统上面必须要有负责这个计划任务的服务,那就是 atd 服务。 不过并非所有的 Linux distributions 都默认会把他打开的,所以,某些时刻我们需要手动将atd 服务激活才行。 激活的方法很简单,就是这样:
命令:
/etc/init.d/atd start
/etc/init.d/atd restart
输出:
[root@localhost /]
[root@localhost /]
用法:/etc/init.d/atd {start|stop|restart|condrestart|status}
[root@localhost /]
停止 atd:[确定]
[root@localhost /]
root 25062 24951 0 14:53 pts/0 00:00:00 grep atd
[root@localhost /]
[确定]td:[确定]
[root@localhost /]
root 25068 1 0 14:53 ? 00:00:00 /usr/sbin/atd
root 25071 24951 0 14:53 pts/0 00:00:00 grep atd
[root@localhost /]
停止 atd:[确定]
[确定]td:[确定]
[root@localhost /]
说明:
/etc/init.d/atd start 没有启动的时候,直接启动atd服务
/etc/init.d/atd restart 服务已经启动后,重启 atd 服务
备注:配置一下启动时就启动这个服务,免得每次重新启动都得再来一次
命令:
chkconfig atd on
输出:
[root@localhost /]
[root@localhost /]
5.2 at 的运行方式
既然是计划任务,那么应该会有任务执行的方式,并且将这些任务排进行程表中。那么产生计划任务的方式是怎么进行的? 事实上,我们使用 at 这个命令来产生所要运行的计划任务,并将这个计划任务以文字档的方式写入 /var/spool/at/ 目录内,该工作便能等待 atd 这个服务的取用与运行了。就这么简单。
不过,并不是所有的人都可以进行 at 计划任务。为什么? 因为系统安全的原因。很多主机被所谓的攻击破解后,最常发现的就是他们的系统当中多了很多的黑客程序, 这些程序非常可能运用一些计划任务来运行或搜集你的系统运行信息,并定时的发送给黑客。 所以,除非是你认可的帐号,否则先不要让他们使用 at 命令。那怎么达到使用 at 的可控呢?
我们可以利用 /etc/at.allow 与 /etc/at.deny 这两个文件来进行 at 的使用限制。加上这两个文件后, at 的工作情况是这样的:
先找寻 /etc/at.allow 这个文件,写在这个文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中);
如果 /etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用者,就可以使用 at 命令了。
如果两个文件都不存在,那么只有 root 可以使用 at 这个命令。
透过这个说明,我们知道 /etc/at.allow 是管理较为严格的方式,而 /etc/at.deny 则较为松散 (因为帐号没有在该文件中,就能够运行 at 了)。在一般的 distributions 当中,由于假设系统上的所有用户都是可信任的, 因此系统通常会保留一个空的 /etc/at.deny 文件,意思是允许所有人使用 at 命令的意思 (您可以自行检查一下该文件)。 不过,万一你不希望有某些使用者使用 at 的话,将那个使用者的帐号写入 /etc/at.deny 即可! 一个帐号写一行。
来自 https://blog.csdn.net/gxiaop/article/details/55101020
at [-V] [-q queue] [-f file] [-mMlbv] TIME
at [-V] [-q queue] [-f file] [-mMlbv] –t time_arg
at –c job[ job…]
at [-rd] job[ job…]
atq [-V] [-q queue]
atrm [-V] job[ job…]
batch
(1).说明
at和batch读取标准输入或一个指定文件,它们将会在稍后被执行。
at在指定的时间执行命令。
atq列出用户待处理作业(jobs),如果是超级用户,所有用户的(待处理)作业都将被列出。输出格式:作业号、日期、小时、队列和用户名。
atrm删除作业,由作业号标识。
batch 当系统负载级别允许时执行命令;换句话说,当负载平均值降至0.8以下时,或者在atd中调用指定的值。
at允许复杂的时间规范,扩展POSIX.2标准。它接受HH:MM形式的时间在一天的特定时间允许一项工作。如果时间已经过去,则假定是第二天。你也可以指定midnight午夜、noon中午或teatime下午茶时间(4PM),并且你可以使用AM、PM来表达允许时间的上午和下午。你还可以表明作业在哪一天运行,通过给出一个形式上有月份名称和任意的年份的日期,或给出形式为MMDDYY、MM/DD/YY、DD.MM.YY、YYYY-MM-DD的日期。日期规格必须遵循一天的时间规格。你也可以给出now + count time-units(时间单位)的时间,时间单位可以是minutes(分钟)、hours(小时)、days(天)或weeks(星期),并且你能通过添加today或tomorrow后缀来告诉at命令今天或明天运行作业。
例如:从现在起三天后的下午四点运行作业at 4pm + 3 days;在July 31上午十点运行作业at 10am July 31;明天上午一点运行作业at 1am tomorrow。
(2).选项
1234567891011 | -V 打印版本信息 -q queue 使用指定的队列。队列名称由单个字母组成,有效队列名称范围从a到z和A到Z。at默认a队列,batch默认b队列。具有较高字母的队列运行良好。特殊队列“=”为正在运行的作业保留。如果作业提交给大写字母指定的队列,则该作业被视为在作业时提交给batch。一旦时间到达批处理规则将应用于负载平衡使用中。如果atq被赋予指定队列,它将只显示该队列的待处理作业。 -m 即使没有输出也会在作业完成后向用户发出邮件。 -M 不发送邮件给用户 -f file从文件读取而不是标准输出 -l atq的别名 -r atrm的别名 -d atrm的别名 -v 显示在读取作业前作业执行的时间。显示时间格式样例“The Feb 20 14:50:00 1997” -c 将命令行中列出的作业标记为标准输出 -t time_arg 提交time_arg参数指定作业运行时间,格式[[CC]YY] MMDDhhmm |
(3).实例
使用相对时间执行命令
12345678 | [ root@CentOS6 桌面 ]# ls [ root@CentOS6 桌面 ]# at now +1 minutes at> echo "at now +1 minutes" >1.txt at> <EOT> job 4 at 2018-07-21 11:22 [ root@CentOS6 桌面 ]# ls 1.txt [ root@CentOS6 桌面 ]# vim 1.txt |
使用绝对时间执行命令
1234 | [ root@CentOS6 桌面 ]# at 12:00 at> ls />2.txt at> <EOT> job 5 at 2018-07-21 12:00 |
查看待处理的作业,并删除无用的作业
12345 | [ root@CentOS6 桌面 ]# atq 5 2018-07-21 12:00 a root [ root@CentOS6 桌面 ]# atrm 5 [ root@CentOS6 桌面 ]# atq [ root@CentOS6 桌面 ]# |
根据作业ID查看执行细节
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | [root@CentOS6 桌面]# at now +2 minutes at> echo "at now +2 minutes" >3.txt at> job 6 at 2018-07-21 12:11 [root@CentOS6 桌面]# at -c 6 #!/bin/sh # atrun uid=0 gid=0 # mail root 0 umask 22 ORBIT_SOCKETDIR=/tmp/orbit-root; export ORBIT_SOCKETDIR HOSTNAME=CentOS6.8; export HOSTNAME IMSETTINGS_INTEGRATE_DESKTOP=yes; export IMSETTINGS_INTEGRATE_DESKTOP SHELL=/bin/bash; export SHELL XDG_SESSION_COOKIE=f361f670c8f25b859941a16a00000017-1532137953.618455-100069161; export XDG_SESSION_COOKIE HISTSIZE=1000; export HISTSIZE GTK_RC_FILES=/etc/gtk/gtkrc:/root/.gtkrc-1.2-gnome2; export GTK_RC_FILES WINDOWID=29360132; export WINDOWID QTDIR=/usr/lib64/qt-3.3; export QTDIR QTINC=/usr/lib64/qt-3.3/include; export QTINC IMSETTINGS_MODULE=IBus; export IMSETTINGS_MODULE USER=root; export USER LS_COLORS=rs=0:di=01\;34:ln=01\;36:mh=00:pi=40\;33:so=01\;35: do =01\;35:bd=40\;33\;01:cd=40\;33\;01:or=40\;31\;01:mi=01\;05\;37\;41:su=37\;41:sg=30\;43:ca=30\;41:tw=30\;42:ow=34\;42:st=37\;44:ex=01\;32:\*.tar=01\;31:\*.tgz=01\;31:\*.arj=01\;31:\*.taz=01\;31:\*.lzh=01\;31:\*.lzma=01\;31:\*.tlz=01\;31:\*.txz=01\;31:\*.zip=01\;31:\*.z=01\;31:\*.Z=01\;31:\*.dz=01\;31:\*.gz=01\;31:\*.lz=01\;31:\*.xz=01\;31:\*.bz2=01\;31:\*.tbz=01\;31:\*.tbz2=01\;31:\*.bz=01\;31:\*.tz=01\;31:\*.deb=01\;31:\*.rpm=01\;31:\*.jar=01\;31:\*.rar=01\;31:\*.ace=01\;31:\*.zoo=01\;31:\*.cpio=01\;31:\*.7z=01\;31:\*.rz=01\;31:\*.jpg=01\;35:\*.jpeg=01\;35:\*.gif=01\;35:\*.bmp=01\;35:\*.pbm=01\;35:\*.pgm=01\;35:\*.ppm=01\;35:\*.tga=01\;35:\*.xbm=01\;35:\*.xpm=01\;35:\*.tif=01\;35:\*.tiff=01\;35:\*.png=01\;35:\*.svg=01\;35:\*.svgz=01\;35:\*.mng=01\;35:\*.pcx=01\;35:\*.mov=01\;35:\*.mpg=01\;35:\*.mpeg=01\;35:\*.m2v=01\;35:\*.mkv=01\;35:\*.ogm=01\;35:\*.mp4=01\;35:\*.m4v=01\;35:\*.mp4v=01\;35:\*.vob=01\;35:\*.qt=01\;35:\*.nuv=01\;35:\*.wmv=01\;35:\*.asf=01\;35:\*.rm=01\;35:\*.rmvb=01\;35:\*.flc=01\;35:\*.avi=01\;35:\*.fli=01\;35:\*.flv=01\;35:\*.gl=01\;35:\*.dl=01\;35:\*.xcf=01\;35:\*.xwd=01\;35:\*.yuv=01\;35:\*.cgm=01\;35:\*.emf=01\;35:\*.axv=01\;35:\*.anx=01\;35:\*.ogv=01\;35:\*.ogx=01\;35:\*.aac=01\;36:\*.au=01\;36:\*.flac=01\;36:\*.mid=01\;36:\*.midi=01\;36:\*.mka=01\;36:\*.mp3=01\;36:\*.mpc=01\;36:\*.ogg=01\;36:\*.ra=01\;36:\*.wav=01\;36:\*.axa=01\;36:\*.oga=01\;36:\*.spx=01\;36:\*.xspf=01\;36:; export LS_COLORS SSH_AUTH_SOCK=/tmp/keyring-EG2luA/socket.ssh; export SSH_AUTH_SOCK GNOME_KEYRING_SOCKET=/tmp/keyring-EG2luA/socket; export GNOME_KEYRING_SOCKET SESSION_MANAGER=local/unix:@/tmp/.ICE-unix/2251,unix/unix:/tmp/.ICE-unix/2251; export SESSION_MANAGER USERNAME=root; export USERNAME DESKTOP_SESSION=gnome; export DESKTOP_SESSION MAIL=/ var /spool/mail/root; export MAIL PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin; export PATH QT_IM_MODULE=ibus; export QT_IM_MODULE PWD=/root/\�\�\�\�\�\�; export PWD XMODIFIERS=@im=ibus; export XMODIFIERS GDM_KEYBOARD_LAYOUT=us; export GDM_KEYBOARD_LAYOUT LANG=zh_CN.UTF-8; export LANG GNOME_KEYRING_PID=2241; export GNOME_KEYRING_PID GDM_LANG=zh_CN.UTF-8; export GDM_LANG GDMSESSION=gnome; export GDMSESSION HISTCONTROL=ignoredups; export HISTCONTROL SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass; export SSH_ASKPASS SHLVL=2; export SHLVL HOME=/root; export HOME GNOME_DESKTOP_SESSION_ID= this - is -deprecated; export GNOME_DESKTOP_SESSION_ID LOGNAME=root; export LOGNAME CVS_RSH=ssh; export CVS_RSH QTLIB=/usr/lib64/qt-3.3/lib; export QTLIB DBUS_SESSION_BUS_ADDRESS=unix: abstract =/tmp/dbus-0ZCxugK00Z,guid=ca2e032461b953e455fa17300000006c; export DBUS_SESSION_BUS_ADDRESS LESSOPEN=\|\|/usr/bin/lesspipe.sh\ %s; export LESSOPEN WINDOWPATH=1; export WINDOWPATH G_BROKEN_FILENAMES=1; export G_BROKEN_FILENAMES XAUTHORITY=/ var /run/gdm/auth- for -root-mLJQsO/database; export XAUTHORITY COLORTERM=gnome-terminal; export COLORTERM cd /root/\�\�\�\�\�\� || { echo 'Execution directory inaccessible' >&2 exit 1 } ${SHELL:-/bin/sh} << 'marcinDELIMITER09c0b95e' echo "at now +2 minutes" >3.txt marcinDELIMITER09c0b95e |
分类: Linux命令
来自 http://www.cnblogs.com/diantong/p/9366449.html
之前说了使用crontab实现定时执行任务,假如我们只是想要让特定任务运行一次,那么,这时候就要用到at监控程序了。
一、at服务
cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。
service atd start //启动服务
service atd stop //关闭服务
service atd restart //重启服务
service atd reload //重新载入配置
service atd status //查看服务状态
二、at在配置文件:
at类似打印进程,会把任务放到/var/spool/at目录中,到指定时间运行它 。at命令相当于另一个shell,运行at time命令时,它发送一个个命令,可以输入任意命令或者程序。
三、参数详解
at [-V] [-q x] [-f file] [-mldbv] time
at -c job ...
atq [-V] [-q x]
atrm [-V] job ...
-V : 印出版本编号
-q : 使用指定的伫列(Queue)来储存,at 的资料是存放在所谓的 queue 中,使用者可以同时使用多个 queue,而 queue 的编号为 a, b, c... z 以及 A, B, ... Z 共 52 个
-m : 即使程序/指令执行完成后没有输出结果, 也要寄封信给使用者
-f file : 读入预先写好的命令档。使用者不一定要使用交谈模式来输入,可以先将所有的指定先写入档案后再一次读入 网络应用
-l : 列出所有的指定 (使用者也可以直接使用 atq 而不用 at -l)
-d : 删除指定 (使用者也可以直接使用 atrm 而不用 at -d)
-v : 列出所有已经完成但尚未删除的指定
at命令执行流程
# at 2:05 tomorrow
at>/home/kyle/do_job
at> Ctrl+D
AT Time中的时间表示方法
-----------------------------------------------------------------------
时 间 例子 说明
-----------------------------------------------------------------------
Minute at now + 5 minutes 任务在5分钟后运行
Hour at now + 1 hour 任务在1小时后运行
Days at now + 3 days 任务在3天后运行
Weeks at now + 2 weeks 任务在两周后运行
Fixed at midnight 任务在午夜运行
Fixed at 10:30pm 任务在晚上10点30分
Fixed at 23:59 12/31/2018 任务在2018年12月31号23点59分
[root@localhost ~]# at 5pm +3 days
at> /bin/date
at> <EOT>
job 1 at 2016-08-30 17:00
[root@localhost ~]# atq
1 2016-08-30 17:00 a root
[root@localhost ~]# at 2:05 tomorrow
at> echo the end of world !
at> <EOT>
job 2 at 2016-08-28 02:05
[root@localhost ~]# atq
2 2016-08-28 02:05 a root
1 2016-08-30 17:00 a root
[root@localhost ~]# atrm 2
[root@localhost ~]# atq
1 2016-08-30 17:00 a root
来自 https://www.cnblogs.com/longjshz/p/5814510.html