侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux at命令教程:如何在指定时间执行一次任务(附实例详解和注意事项)

Linux at命令介绍

at命令是一个用来在指定时间执行一次任务的命令,它的全称是at (execute commands at a later time)。at命令可以让用户在指定的日期和时间运行一些命令或者脚本,而不需要使用cron服务。at命令的优点是可以灵活地安排一次性的任务,而不需要修改crontab文件。at命令的缺点是不能执行周期性的任务,而且需要atd服务在后台运行。

Linux at命令适用的Linux版本

at命令适用于大多数的Linux发行版,如Ubuntu, Debian, Fedora, CentOS等。如果某些Linux发行版没有预装at命令,可以使用以下命令来安装:

  • Ubuntu/Debian: sudo apt install at
  • Fedora/CentOS: sudo yum install at

安装完成后,需要启动atd服务,可以使用以下命令:

  • Ubuntu/Debian: sudo service atd start
  • Fedora/CentOS: sudo systemctl start atd

如果要让atd服务在开机时自动启动,可以使用以下命令:

  • Ubuntu/Debian: sudo update-rc.d atd enable
  • Fedora/CentOS: sudo systemctl enable atd

Linux at命令的基本语法

at命令的基本语法格式如下:

at [选项] 时间

其中,时间可以是以下几种格式:

  • HH:MM (24小时制,如 23:59)
  • HH:MM AM/PM (12小时制,如 11:59 PM)
  • MMDDYY (月日年,如 122523)
  • MM/DD/YY (月/日/年,如 12/25/23)
  • DD.MM.YY (日.月.年,如 25.12.23)
  • now + N units (从现在开始的N个时间单位,如 now + 5 minutes)
  • noon/midnight (中午或午夜)
  • next week/day/hour/minute (下一周/天/小时/分钟)
  • tomorrow/yesterday (明天或昨天)

选项可以是以下几种:

  • -f 文件名:从指定的文件中读取要执行的命令或脚本
  • -l:列出当前用户的待执行任务
  • -d 任务号:删除指定的任务
  • -v 任务号:显示指定任务的执行时间
  • -c 任务号:显示指定任务的命令内容
  • -q 队列:指定任务的执行队列,队列可以是a-z或A-Z,不同的队列有不同的优先级,a最高,z最低
  • -m:任务执行完成后发送邮件通知用户
  • -b:任务执行开始时发送邮件通知用户

Linux at命令的常用选项或参数说明

以下是at命令的常用选项或参数的说明,使用表格形式展示:

选项参数说明
-f文件名从指定的文件中读取要执行的命令或脚本
-l列出当前用户的待执行任务
-d任务号删除指定的任务
-v任务号显示指定任务的执行时间
-c任务号显示指定任务的命令内容
-q队列指定任务的执行队列,队列可以是a-z或A-Z,不同的队列有不同的优先级,a最高,z最低
-m任务执行完成后发送邮件通知用户
-b任务执行开始时发送邮件通知用户

Linux at命令的实例

以下是at命令的一些常用的实例,结合最常搜索的关键词来作为标题:

如何使用at命令在指定时间执行一次任务

如果要在指定时间执行一次任务,可以直接输入at命令,然后在提示符下输入要执行的命令或脚本,最后按Ctrl+D结束输入。例如,如果要在明天的10点执行一个名为test.sh的脚本,可以输入以下命令:

[linux@bashcommandnotfound.cn ~]$ at 10:00 tomorrow
at> sh test.sh
at> <EOT>
job 1 at Wed Dec 13 10:00:00 2023

其中,表示输入结束,job 1表示任务的编号,可以用来查看或删除任务。

如何使用at命令从文件中读取要执行的命令或脚本

如果要从文件中读取要执行的命令或脚本,可以使用-f选项,指定文件的路径。例如,如果要在今天的中午执行一个名为commands.txt的文件中的命令,可以输入以下命令:

[linux@bashcommandnotfound.cn ~]$ at -f commands.txt noon
job 2 at Tue Dec 12 12:00:00 2023

如何使用at命令列出当前用户的待执行任务

如果要列出当前用户的待执行任务,可以使用-l选项,不需要指定参数。例如,如果要查看当前用户的所有任务,可以输入以下命令:

[linux@bashcommandnotfound.cn ~]$ at -l
1	Wed Dec 13 10:00:00 2023 a linux
2	Tue Dec 12 12:00:00 2023 a linux

其中,1和2表示任务的编号,a表示任务的队列,linux表示任务的所有者。

如何使用at命令删除指定的任务

如果要删除指定的任务,可以使用-d选项,指定任务的编号。例如,如果要删除编号为1的任务,可以输入以下命令:

[linux@bashcommandnotfound.cn ~]$ at -d 1

如何使用at命令显示指定任务的执行时间

如果要显示指定任务的执行时间,可以使用-v选项,指定任务的编号。例如,如果要显示编号为2的任务的执行时间,可以输入以下命令:

[linux@bashcommandnotfound.cn ~]$ at -v 2
Tue Dec 12 12:00:00 2023

如何使用at命令显示指定任务的命令内容

如果要显示指定任务的命令内容,可以使用-c选项,指定任务的编号。例如,如果要显示编号为2的任务的命令内容,可以输入以下命令:

[linux@bashcommandnotfound.cn ~]$ at -c 2
#!/bin/sh
# atrun uid=1000 gid=1000
# mail linux 0
umask 22
sh commands.txt

如何使用at命令指定任务的执行队列

如果要指定任务的执行队列,可以使用-q选项,指定队列的字母。例如,如果要在明天的10点执行一个名为test.sh的脚本,并指定任务的队列为b,可以输入以下命令:

[linux@bashcommandnotfound.cn ~]$ at -q b 10:00 tomorrow
at> sh test.sh
at> <EOT>
job 3 at Wed Dec 13 10:00:00 2023

如何使用at命令发送邮件通知用户任务的执行情况

如果要发送邮件通知用户任务的执行情况,可以使用-m或-b选项,不需要指定参数。-m选项表示任务执行完成后发送邮件,-b选项表示任务执行开始时发送邮件。例如,如果要在今天的中午执行一个名为commands.txt的文件中的命令,并在任务执行完成后发送邮件,可以输入以下命令:

[linux@bashcommandnotfound.cn ~]$ at -m -f commands.txt noon
job 2 at Tue Dec 12 12:00:00 2023

其中,-m选项表示任务执行完成后发送邮件,-f选项表示从文件中读取要执行的命令。如果要在任务执行开始时发送邮件,可以使用-b选项,如下:

[linux@bashcommandnotfound.cn ~]$ at -b -f commands.txt noon
job 2 at Tue Dec 12 12:00:00 2023

如果要同时在任务执行开始和完成时发送邮件,可以使用-m和-b选项一起,如下:

[linux@bashcommandnotfound.cn ~]$ at -m -b -f commands.txt noon
job 2 at Tue Dec 12 12:00:00 2023

如何使用at命令在指定时间执行多条命令

如果要在指定时间执行多条命令,可以在输入at命令后,依次输入要执行的命令,每条命令占一行,最后按Ctrl+D结束输入。例如,如果要在今天的午夜执行三条命令,可以输入以下命令:

[linux@bashcommandnotfound.cn ~]$ at midnight
at> echo "Hello, world!"
at> date
at> whoami
at> <EOT>
job 4 at Wed Dec 13 00:00:00 2023

如何使用at命令在指定时间执行一个交互式命令

如果要在指定时间执行一个交互式命令,可以使用<<EOF作为输入结束的标志,然后在命令中输入要交互的内容,最后输入EOF结束输入。例如,如果要在明天的早上8点执行一个名为quiz.sh的交互式脚本,可以输入以下命令:

[linux@bashcommandnotfound.cn ~]$ at 8:00 tomorrow
at> sh quiz.sh <<EOF
at> Linux
at> Bash
at> EOF
at> <EOT>
job 5 at Wed Dec 13 08:00:00 2023

其中,quiz.sh是一个简单的问答脚本,如下:

#!/bin/bash
echo "What is the name of the operating system?"
read os
echo "What is the name of the shell?"
read shell
echo "Your answers are: $os and $shell"

如何使用at命令在指定时间执行一个需要输入密码的命令

如果要在指定时间执行一个需要输入密码的命令,可以使用echo命令将密码作为标准输入传递给命令,然后使用管道符连接命令。例如,如果要在今天的晚上9点执行一个需要输入密码的命令,可以输入以下命令:

[linux@bashcommandnotfound.cn ~]$ at 21:00
at> echo "mypassword" | sudo -S apt update
at> <EOT>
job 6 at Tue Dec 12 21:00:00 2023

其中,-S选项表示从标准输入读取密码,而不是从终端。

Linux at命令的注意事项

以下是at命令的一些注意事项,分点描述:

  • at命令只能执行一次性的任务,不能执行周期性的任务,如果要执行周期性的任务,可以使用cron命令。
  • at命令需要atd服务在后台运行,如果atd服务没有启动,可以使用service或systemctl命令来启动。
  • at命令的任务是按照用户的环境变量和当前工作目录来执行的,如果要改变环境变量或工作目录,可以在输入命令时指定。
  • at命令的任务是按照用户的权限来执行的,如果要执行需要特权的命令,可以使用sudo命令,并将密码作为标准输入传递。
  • at命令的任务是按照系统的时间来执行的,如果系统的时间发生变化,可能会影响任务的执行时间。
  • at命令的任务执行时,会将标准输出和标准错误输出发送到用户的邮件地址,如果要关闭邮件通知,可以使用>/dev/null 2>&1来重定向输出。
  • at命令的任务执行时,如果遇到bash: at: command not found的错误,表示at命令没有安装,可以使用apt或yum命令来安装。
0

评论区