
正文
关于linux下atd命令的信息
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
linux.at 命令怎么用
一次性定时计划任务的at命令的用法!
1.命令格式:
at[参数][时间]
2.命令功能:
在一个指定的时间执行一个指定任务,只能执行一次,且需要开启atd进程(
ps -ef | grep atd查看, 开启用/etc/init.d/atd start or restart; 开机即启动则需要运行 chkconfig --level 2345 atd on)。
3.命令参数:
-m 当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出
-I atq的别名
-d atrm的别名
-v 显示任务将被执行的时间
-c 打印任务的内容到标准输出
-V 显示版本信息
-q列队 使用指定的列队
-f文件 从指定文件读入任务而不是从标准输入读入
-t时间参数 以时间参数的形式提交要运行的任务 《Linux就该这么学》
使用实例:
实例1:三天后的下午 5 点锺执行 /bin/ls
命令:
at 5pm+3 days
输出:
[root@localhost ~]# at 5pm+3 days
at /bin/ls
at EOT
job 7 at 2013-01-08 17:00
[root@localhost ~]#
说明:
实例2:明天17点钟,输出时间到指定文件内
命令:
at 17:20 tomorrow
输出:
[root@localhost ~]# at 17:20 tomorrow
at date /root/2013.log
at EOT
job 8 at 2013-01-06 17:20
相关问答
Q1: linux中at的执行结果放在哪里
之前说了使用crontab实现定时执行任务linux下atd命令,假如linux下atd命令我们只是想要让特定任务运行一次,那么linux下atd命令,这时候就要用到at监控程序了。
一、at服务
cron是一个linux下 linux下atd命令的定时执行工具,可以在无需人工干预的情况下运行作业。
service atd start //启动服务
service atd stop //关闭服务
service atd restart //重启服务
service atd reload //重新载入配置
service atd status //查看服务状态
二、at在配置文件linux下atd命令:
at类似打印进程,会把任务放到/var/spool/at目录中,到指定时间运行它 。at命令相当于另一个shell,运行at time命令时,它发送一个个命令,可以输入任意命令或者程序。
三、参数详解
at [-V] [-q x] [-f file] [-mldbv] time
at -c job ...
atq [-V] [-q x]
atrm [-V] job ...
-V : 印出版本编号
-q : 使用指定的伫列(Queue)来储存,at 的资料是存放在所谓的 queue 中,使用者可以同时使用多个 queue,而 queue 的编号为 a, b, c... z 以及 A, B, ... Z 共 52 个
-m : 即使程序/指令执行完成后没有输出结果, 也要寄封信给使用者
-f file : 读入预先写好的命令档。使用者不一定要使用交谈模式来输入,可以先将所有的指定先写入档案后再一次读入 网络应用
-l : 列出所有的指定 (使用者也可以直接使用 atq 而不用 at -l)
-d : 删除指定 (使用者也可以直接使用 atrm 而不用 at -d)
-v : 列出所有已经完成但尚未删除的指定
at命令执行流程
# at 2:05 tomorrow
at/home/kyle/do_job
at Ctrl+D
AT Time中的时间表示方法
-----------------------------------------------------------------------
时 间 例子 说明
-----------------------------------------------------------------------
Minute at now + 5 minutes 任务在5分钟后运行
Hour at now + 1 hour 任务在1小时后运行
Days at now + 3 days 任务在3天后运行
Weeks at now + 2 weeks 任务在两周后运行
Fixed at midnight 任务在午夜运行
Fixed at 10:30pm 任务在晚上10点30分
Fixed at 23:59 12/31/2018 任务在2018年12月31号23点59分
Q2: linux程序跑完响铃怎么设置
由于at大多数 Linux 发行版都没有默认安装该工具linux下atd命令,因此linux下atd命令我们需要先添加它。以下是大多数较受欢迎的方法。
Ubuntu / Debian / Linux Mint
linuxmi@linuxmi /home/linuxmi/ sudo apt install at
Fedora / AlmaLinux / Rocky Linux
linuxmi@linuxmi /home/linuxmi/ sudo dnf install at
Arch Linux / Manjaro
linuxmi@linuxmi /home/linuxmi/ sudo pacman -S at
然后,请验证该atd服务是否已启用并正在运行,因为该at命令依赖于它。
linuxmi@linuxmi /home/linuxmi/ sudo systemctl status atd
检查 atd 服务是否正在运行。
如果不是,您可以通过运行如下所示的两个命令来激活并运行它。
sudo systemctl enable atd sudo systemctl start atd
OK。linux下atd命令我们现在可以继续使用at命令设置警报。语法很简单。键入at,然后是您希望执行特定操作的时间。这里有些例子:
安排作业在 10 分钟后执行:
at now +10 minutes
安排在特定时间执行的作业:
at 15:00 at 3:00 pm
安排作业在 1 月 19 日早上 8:30 执行。
at 8:30 January 19
安排明天下午 5:00 执行作业。
at 5:00 pm tomorrow
现在你应该明白了。使用“ HH:MM ”格式指定时间。在时间后使用“ am ”或“ pm ”表示 12 小时制时间格式。最重要的是,可以使用月份名称后跟日期来指定日期。此外,at接受“ now+ interval ”增量,其中 interval 是一个数字,后面可以跟以下字符串之一:“ minutes ”、“ hours ”、“ days ”或“ weeks ”。
现在让我们继续在 Linux 上设置闹钟。为此,我们将在无界面模式(无 GUI)下使用 VLC 媒体播放器,并指示它在特定时间播放给定的媒体文件。因此,如果您的 Linux 系统上没有 VLC,请安装它。
我们将闹钟定在早上 7:30。然后,当您输入所需的命令时at 7:30,您将被带到at命令行界面,您可以在其中输入要在指定时间运行的命令。在这种情况下,那将是:
vlc --intf dummy alarm.mp3
当然,如果媒体文件位于主目录之外的其他位置,请指定完整路径。
准备就绪后,按“ Enter ”,然后按键盘快捷键“ Ctrl + D ”保存您的作业并退出。
使用 at 命令安排作业。
要查看所有计划at的作业,请键入:
[linuxmi@fedora ]$ at -l

您将看到每个作业的唯一 ID、计划运行的日期和时间以及运行它的用户。要删除作业,请键入at -r后跟其唯一 ID 号。
at -r 3

您可以在 Linux 手册页at上查看命令选项的完整列表。
使用 sleep 命令在 Linux 上设置闹钟
在 Linux 上,该sleep命令将 shell 脚本或命令的执行暂停指定的时间。因此,这使它成为在 Linux 中设置警报的理想选择。
但是,在这里您没有at命令提供的灵活性。您所能做的就是指定应该在多长时间后触发一个动作。此外,您可以以秒 ( s)、分钟 ( m)、小时 ( h) 和天 ( d) 为单位设置延迟时间。
因此,要设置闹钟,您必须首先计算它应该在距当前时间多远的时间后发生。此外,sleep执行命令的终端窗口必须保持打开状态。关闭它将导致命令中止并且设置警报失败。
sleep要使用将在 8 小时后启动 VLC 播放器播放媒体文件的命令在 Linux 上设置闹钟,请键入:
[linuxmi@fedora ]$ sleep 8h vlc --intf dummy alarm.mp3
使用 sleep 命令在 Linux 上安排警报。
就是这样。请记住,您不应关闭终端窗口。同样,如果你想让闹钟在 20 分钟后播放,命令如下:
[linuxmi@fedora ]$ sleep 20m vlc --intf dummy alarm.mp3
您可以在Linux 手册页上查看 sleep 命令选项的完整列表。
通过 GNOME 时钟在 GNOME 中设置闹钟
您可以使用内置的 GNOME 时钟应用程序通过 GNOME 桌面环境设置闹钟。如果您还没有它,您可以通过从您正在使用的发行版的软件中心安装它来轻松获得它。
Q3: 19. Linux的at定时任务调度
与crond不同的是,at任务调度是一次性的,而crond是重复性的
1.1 at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行
1.2 默认情况下,atd守护进程每60s检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业
1.3 at命令是一次性定时计划任务,执行完一个任务后就不再执行这个任务了
1.4 在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令查看
ps -ef | grep atd 可以检查atd是否在运行
at [选项] [时间]
按两次 ctrl+d 结束at命令的输入
4.1 当天的hh:mm(小时:分钟),假如这个时间已经过去,那么就第二天的这个时间执行。例如04:00
4.2 模糊的词语,例如midnight、noon、teatime(下午茶时间,16:00左右)
4.3 采用12小时计时制,例如8am
4.4 指定执行命令的具体日期,格式为month dat(月 日)或者mm/dd/yy或者dd.mm.yy,指定的日期必须跟着写在在指定时间的后面,例如:04:00 2021-3-1就是2021年3月1日凌晨4点整执行
4.5 相对计时法,指定格式为now + count time-units,now就是当前时间,time-units是时间单位,可以是minutes、hours、days、weeks。count是时间的数量,例如:now + 5 minutes
4.6 直接用today、tomorrow来指定完成命令的时间
5.1 2天后的下午5点,执行/bin/ls /home指令
at 5pm + 2 days 按回车键
然后写下那个时刻要执行命令 /bin/ls /home
最后按两次ctrl+d退出at指令
5.2 atq指令可以直接执行,查看系统中待执行的工作任务
5.3 明天17:00输出时间到指定文件内 /root/date100.log
at 17:00 tomorrow 按回车键
date /root/date100.log
按两次ctrl+d退出at指令的输入
5.4 2分钟后
at now + 2 minutes
5.5 删除已经设置的任务,atrm 编号
可以用atq列出待执行的任务,列出后第一列就是job编号
Q4: linux atd的坑
一般linux系统中定时周期性任务的执行我们都是用crontab去实现,而执行延时任务的话比较少人会用到atd服务。之前项目中有需要用到执行延时任务的场景,因为偷懒,懒得自己写工具去实现,就使用了atd服务的at命令创建一个延时任务,结果延时任务竟然没执行。刚好团队内部要分享,觉得这个问题还是有一定价值,先记录下吧。
(注:atd服务centos7中minimal版是没有自带的,需要yum进行安装,安装完毕可以执行at命令进行任务下发,两种方式:1、echo "command" | at now + 时间间隔的形式;2、at命令交互shell的方式)
出现问题的时候查看/var/log/messages等系统日志并没看出什么有效信息,网络上也几乎没找到相关的信息。最终,在尝试复现时,发现了问题所在,linux系统提示“You have mail in /var/spool/mail/root”,tail -f一查看就基本明确了,下面是通过在/root/attest目录下创建echo "echo 10 /root/task.txt | at now + 2 minute"任务后,删除attest目录后复现出的现象,日志中提示如下:
邮件提示是运行时的路径找不到了,原来是通过at下发的任务在运行时还依赖执行下发动作时的工作目录,如果你在下发完任务后,把当时的路径给删掉了,那这个任务就GG了。其实可以在下发完任务后通过atq获取到任务编号,并通过at -c 加任务编号查看任务信息,任务信息中有记录运行任务所需的工作路径。
请忽略上图中任务id不一致的情况,上图仅仅是为了说明问题。
linux下atd命令的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、linux下atd命令的信息别忘了在本站进行查找喔。








