Linux系统之一次性计划任务at命令的基本使用
- 一、at命令介绍
- 二、at命令的使用帮助
- 2.1 at命令的help帮助信息
- 2.2 at命令的语法解释
- 三、at命令的日常使用
- 3.1 立即执行一次性任务
- 3.2 指定时间执行一次性任务
- 3.3 查询计划任务
- 3.4 其他指定时间用法
- 3.5 删除已经设置的计划任务
- 3.6 显示某计划任务详细内容
- 四、at与crontab命令的区别
- 五、at命令的使用注意事项
一、at命令介绍
at命令是一个计划任务工具,可以让用户在指定的时间执行某个命令或者脚本,at命令用于管理一次性计划任务。
二、at命令的使用帮助
2.1 at命令的help帮助信息
在命令行中使用help查询at命令的使用帮助信息
[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命令的语法解释
- 语法
at [-V] [-q 队列] [-f 文件] [-mldbv] 时间 at -c 作业 [作业...]
- 选项
-f:指定包含具体指令的任务文件;
-q:指定新任务的队列名称;
-l:显示待执行任务的列表;
-d:删除指定的待执行任务;
-m:任务执行完成后向用户发送E-mail。
- 参数
日期时间:指定任务执行的日期时间。
三、at命令的日常使用
3.1 立即执行一次性任务
立即执行一次性任务,使用 at now 命令,输入该命令后,会在终端下面出现一个at>提示符,此时输入要执行的命令,然后按下Ctrl+D即可。
[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文件中。
[root@jeven ~]# cat /tmp/aa.txt
hello
3.2 指定时间执行一次性任务
输入该命令后,会在终端下面出现一个at>提示符,此时输入要执行的命令,然后按下Ctrl+D即可
[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文件中。
[root@jeven ~]# cat /tmp/test.txt
test
3.3 查询计划任务
计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务。
[root@jeven ~]# atq
2 Thu Nov 16 16:22:00 2023 a root
3.4 其他指定时间用法
- 指定2天后的下午5点执行命令df -hT命令
[root@jeven ~]# at 5:00pm+2 days
at> /bin/df -hT
at> <EOT>
job 3 at Sat Nov 18 17:00:00 2023
- 明天上午8点,将时间输出到指定文件。
[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 删除已经设置的计划任务
查询还未执行的计划任务
[root@jeven ~]# at -l
3 Sat Nov 18 17:00:00 2023 a root
4 Fri Nov 17 08:00:00 2023 a root
删除已经设置的计划任务
atrm 3
3.6 显示某计划任务详细内容
显示某计划任务详细内容
at -c 4
#!/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命令删除未执行的任务。