Linux系统之一次性计划任务at命令的基本使用

2023-11-30 15:30:37 浏览数 (1)

在这里插入图片描述在这里插入图片描述

一、at命令介绍

at命令是一个计划任务工具,可以让用户在指定的时间执行某个命令或者脚本,at命令用于管理一次性计划任务。

二、at命令的使用帮助

2.1 at命令的help帮助信息

在命令行中使用help查询at命令的使用帮助信息

代码语言:shell复制
[root@jeven ~]# at --help
at: invalid option -- '-'
Usage: at [-V] [-q x] [-f file] [-mMlbv] timespec ...
       at [-V] [-q x] [-f file] [-mMlbv] -t time
       at -c job ...
       atq [-V] [-q x]
       at [ -rd ] job ...
       atrm [-V] job ...
       batch

2.2 at命令的语法解释

  • 语法
代码语言:shell复制
at [-V] [-q 队列] [-f 文件] [-mldbv] 时间 at -c 作业 [作业...]
  • 选项
代码语言:shell复制
-f:指定包含具体指令的任务文件;
-q:指定新任务的队列名称;
-l:显示待执行任务的列表;
-d:删除指定的待执行任务;
-m:任务执行完成后向用户发送E-mail。
  • 参数
代码语言:shell复制
日期时间:指定任务执行的日期时间。

三、at命令的日常使用

3.1 立即执行一次性任务

立即执行一次性任务,使用 at now 命令,输入该命令后,会在终端下面出现一个at>提示符,此时输入要执行的命令,然后按下Ctrl D即可。

代码语言:shell复制
[root@jeven ~]# at now
at> echo "hello" >> /tmp/aa.txt
at> <EOT>
job 1 at Thu Nov 16 16:16:00 2023

这个命令会在当前时间执行一次性任务,将字符串"hello "追加到/tmp/aa.txt文件中。

代码语言:shell复制
[root@jeven ~]# cat /tmp/aa.txt
hello

3.2 指定时间执行一次性任务

输入该命令后,会在终端下面出现一个at>提示符,此时输入要执行的命令,然后按下Ctrl D即可

代码语言:shell复制
[root@jeven ~]# at 16:22
at> echo "test" >> /tmp/test.txt
at> <EOT>
job 2 at Thu Nov 16 16:22:00 2023

在16:22时间后,查询字符串"test"已成功追加到/tmp/test.txt文件中。

代码语言:shell复制
[root@jeven ~]# cat /tmp/test.txt
test

3.3 查询计划任务

计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务。

代码语言:shell复制
[root@jeven ~]# atq
2	Thu Nov 16 16:22:00 2023 a root

3.4 其他指定时间用法

  • 指定2天后的下午5点执行命令df -hT命令
代码语言:shell复制
[root@jeven ~]# at 5:00pm 2 days
at> /bin/df -hT
at> <EOT>
job 3 at Sat Nov 18 17:00:00 2023
  • 明天上午8点,将时间输出到指定文件。
代码语言:shell复制
[root@jeven ~]# at 08:00am  tomorrow
at> date >> /tmp/date.txt
at> <EOT>
job 4 at Fri Nov 17 08:00:00 2023

3.5 删除已经设置的计划任务

查询还未执行的计划任务

代码语言:shell复制
[root@jeven ~]# at -l
3	Sat Nov 18 17:00:00 2023 a root
4	Fri Nov 17 08:00:00 2023 a root

删除已经设置的计划任务

代码语言:shell复制
atrm 3

3.6 显示某计划任务详细内容

显示某计划任务详细内容

代码语言:shell复制
at -c 4
代码语言:shell复制
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
XDG_SESSION_ID=8; export XDG_SESSION_ID
HOSTNAME=jeven; export HOSTNAME
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
SSH_CLIENT=192.168.3.168 56614 22; export SSH_CLIENT
SSH_TTY=/dev/pts/0; export SSH_TTY
http_proxy=http://127.0.0.1:38457; export http_proxy
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:*.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_COLORS
MAIL=/var/spool/mail/root; export MAIL
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/node-v14.17.0-linux-x64/bin/:/usr/local/bin:/root/bin; export PATH
PWD=/root; export PWD
LANG=en_US.UTF-8; export LANG
https_proxy=https://127.0.0.1:38457; export https_proxy
HISTCONTROL=ignoredups; export HISTCONTROL
SHLVL=1; export SHLVL
HOME=/root; export HOME
LOGNAME=root; export LOGNAME
XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share; export XDG_DATA_DIRS
SSH_CONNECTION=192.168.3.168 56614 192.168.3.166 22; export SSH_CONNECTION
LESSOPEN=||/usr/bin/lesspipe.sh %s; export LESSOPEN
XDG_RUNTIME_DIR=/run/user/0; export XDG_RUNTIME_DIR
NODE_HOME=/root/node-v14.17.0-linux-x64/bin/; export NODE_HOME
cd /root || {
	 echo 'Execution directory inaccessible' >&2
	 exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER200a5ac0'
date >> /tmp/date.txt

marcinDELIMITER200a5ac0

四、at与crontab命令的区别

at和crontab都是用于任务调度的命令,但是它们的使用场景和运行方式不同,at命令适用于一次性的任务调度,而crontab命令适用于周期性的任务调度。。

  • at命令是一次性的任务调度,它允许用户将任务安排到指定的时间点运行一次,该任务将在指定的时间点被执行一次后立即被销毁。at命令适用于只需要执行一次的任务,例如立即发送一封电子邮件或在明天早上备份系统。
  • crontab命令则可以定期重复执行指定的任务,它可以在固定的时间间隔内不间断地运行任务。crontab命令常用于周期性的任务,例如每天备份数据库或定时清理日志文件。

五、at命令的使用注意事项

  • at命令不适用于需要用户交互的程序,它只适用于一些可以直接运行的命令或程序。
  • at命令需要root用户或具备特殊权限的用户才能进行操作。
  • at命令虽然可以在指定的时间运行命令或程序,但不保证一定会在该时间运行,因为系统可能会出现一些延迟。
  • at命令可以运行多个命令或程序,只需要将它们以分号隔开即可。
  • at命令在执行命令或程序时,会自动在后台进行,不会在当前终端显示结果,如果需要查看结果,需要手动查看日志文件或者输出到文件中。
  • at命令的执行时间必须按照24小时制的时间格式指定。
  • at命令可以使用atq命令查看等待运行的任务列表,使用atrm命令删除未执行的任务。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞