Linux at

前言

上一篇crontab是例行性的,就是每隔一定的周期要来办的事项

还有一种情况是突发性的,就是仅执行一次,这个时候就需要用到at指令咯

语法

at [ -mldv ] TIME 

选项与参数:
-m :当 at 的工作完成后,即使没有输出讯息,亦以 email 通知使用者该工作已完成。
-l :at -l 相当于 atq,列出目前系统上面的所有该用户的 at 排程;
-d :at -d 相当于 atrm ,可以取消一个在 at 排程中的工作;
-v :可以使用较明显的时间格式栏出 at 排程中的任务栏表;
-c :可以列出后面接的该项工作的实际指令内容。
TIME:时间格式,这里可以定义出『什么时候要进行 at 这项工作』的时间,格式有:
HH:MM ex> 04:00
在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此工作。
HH:MM YYYY-MM-DD ex> 04:00 2015-07-30
强制规定在某年某月的某一天的特殊时刻进行该工作!
HH:MM[am|pm] [Month] [Date] ex> 04pm July 30
也是一样,强制在某年某月某日的某时刻进行!
HH:MM[am|pm] + number [minutes|hours|days|weeks]
ex> now + 5 minutes ex> 04pm + 3 days
就是说,在某个时间点『再加几个时间后』才进行。

最常用的就是 at now + 5 minutes 这样的写法了

如何使用

  1. 输入at now + TIME,然后回车:
    在这里插入图片描述

  2. 此时进入输入模式,输入要调用的脚本
    在这里插入图片描述

  3. 回车,然后ctrl + d,(或者连着按两下ctrl + d)
    在这里插入图片描述
    出现<EOT>的字样!代表结束!

实例

  • 使用相对时间执行命令
[hdfs@slave03 ~]$ at now + 1 minutes
at> echo "at now + 1 minutes" > 1.txt
at> <EOT> // Ctrl+d会直接打出<EOT>
job 15 at Wed Nov 20 16:34:00 2019 // 显示任务执行的时间
  • 使用绝对时间执行命令
[hdfs@slave03 ~]$ at 16:40
at> echo "abs time" > 2.txt
at> <EOT>
job 16 at Wed Nov 20 16:40:00 2019
  • 查看待处理的作业,并删除无用的作业
[hdfs@slave03 ~]$ atq  // 查看待处理的作业,也可以是at -l
16	Wed Nov 20 16:40:00 2019 a hdfs  // 16任务编号,Wed Nov 20 16:40:00 2019执行时间,a队列,hdfs执行者
[hdfs@slave03 ~]$ atrm 16 // 删除无用的作业
[hdfs@slave03 ~]$ atq
[hdfs@slave03 ~]$ 
  • 根据作业ID查看执行细节
[hdfs@slave03 ~]$ at now + 1 minutes
at> echo "1 minutes" > 3.txt
at> <EOT>
job 17 at Wed Nov 20 16:43:00 2019
[hdfs@slave03 ~]$ at -c 17
#!/bin/sh
# atrun uid=987 gid=979
# mail analysis 0
umask 2
XDG_SESSION_ID=130533; export XDG_SESSION_ID
HOSTNAME=slave03; export HOSTNAME
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
USER=hdfs; 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:\*.arc=01\;31:\*.arj=01\;31:\*.taz=01\;31:\*.lha=01\;31:\*.lz4=01\;31:\*.lzh=01\;31:\*.lzma=01\;31:\*.tlz=01\;31:\*.txz=01\;31:\*.tzo=01\;31:\*.t7z=01\;31:\*.zip=01\;31:\*.z=01\;31:\*.Z=01\;31:\*.dz=01\;31:\*.gz=01\;31:\*.lrz=01\;31:\*.lz=01\;31:\*.lzo=01\;31:\*.xz=01\;31:\*.bz2=01\;31:\*.bz=01\;31:\*.tbz=01\;31:\*.tbz2=01\;31:\*.tz=01\;31:\*.deb=01\;31:\*.rpm=01\;31:\*.jar=01\;31:\*.war=01\;31:\*.ear=01\;31:\*.sar=01\;31:\*.rar=01\;31:\*.alz=01\;31:\*.ace=01\;31:\*.zoo=01\;31:\*.cpio=01\;31:\*.7z=01\;31:\*.rz=01\;31:\*.cab=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:\*.webm=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_COLORSMAIL=/var/spool/mail/hdfs; export MAIL
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/var/lib/hadoop-hdfs/.local/bin:/var/lib/hadoop-hdfs/bin; export PATH
PWD=/var/lib/hadoop-hdfs; export PWD
LANG=en_US.UTF-8; export LANG
HISTCONTROL=ignoredups; export HISTCONTROL
SHLVL=1; export SHLVL
HOME=/var/lib/hadoop-hdfs; export HOME
LOGNAME=hdfs; export LOGNAME
XDG_DATA_DIRS=/var/lib/hadoop-hdfs/.local/share/flatpak/exports/share/:/var/lib/flatpak/exports/share/:/usr/local/share/:/usr/share/; export XDG_DATA_DIRS
LESSOPEN=\|\|/usr/bin/lesspipe.sh\ %s; export LESSOPEN
cd /var/lib/hadoop\-hdfs || {
	 echo 'Execution directory inaccessible' >&2
	 exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER38de7ba2'
echo "1 minutes" > 3.txt

marcinDELIMITER38de7ba2
[hdfs@slave03 ~]$ 

说明:at命令尚未执行的任务都存在/var/spool/at/目录下,也可以直接查看该文件。

后记

at最常用法:

at 20:00 2019-111-20  在具体时间执行

at now +10min  在十分钟后执行

at 17:00 tomorrow  明天下午五点执行

at 6:00 pm + 3 days  在3天后下午6点执行

发布了237 篇原创文章 · 获赞 140 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/Android_xue/article/details/103164351
今日推荐