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命令来安装。
评论区