一般linux系统中定时周期性任务的执行我们都是用crontab去实现,而执行延时任务的话比较少人会用到atd服务.之前项目中有需要用到执行延时任务的场景,因为偷懒,懒得自己写工具去实现,就使用了atd服务的at命令创建一个延时任务,结果延时任务竟然没执行.刚好团队内部要分享,觉得这个问题还是有一定价值,先记录下吧.
邮件提示是运行时的路径找不到了,原来是通过at下发的任务在运行时还依赖执行下发动作时的工作目录,如果你在下发完任务后,把当时的路径给删掉了,那这个任务就GG了.其实可以在下发完任务后通过atq获取到任务编号,并通过at -c 加任务编号查看任务信息,任务信息中有记录运行任务所需的工作路径.
请忽略上图中任务id不一致的情况,上图仅仅是为了说明问题.
与crond不同的是,at任务调度是一次性的,而crond是重复性的
①1 at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行
ps -ef | grep atd 可以检查atd是否在运行
at [选项] [时间]
按两次 ctrl◆d 结束at命令的输入
然后写下那个时刻要执行命令 /bin/ls /home
最后按两次ctrl◆d退出at指令
date /root/date100.log
按两次ctrl◆d退出at指令的输入
可以用atq列出待执行的任务,列出后第一列就是job编号
Linux下,有两个命令可以用来作为计划任务而执行,
要使用一次性任务计划,linux必须要有负责这个计划任务的服务,那就是atd服务
但是并非所有的linux distribution都默认会打开,我们需要手动激活爱听的任务
如果服务未安装,则需要手动安装
#:yum install - y at 或 #:apt-get install at
如果担心启动是否执行OK的话,可使用命令查看:
#:ps aux |grep atd
或者使用
systemctl status atd
# 查阅一下 atd 目前的状态,Active 状态应是 running
使用 at 这个指令来产生所要运行的工作,并 将这个工作以文本文件的方式写入 /var/spool/cron/atjobs/ 目录内,该工作便能等待 atd 这个服务的取用与执行了. 不过,因为安全的理由,并不是所有的人都可以进行 at 工作调度!
at 的使用限制是利用 /etc/at.allow 与 /etc/at.deny 这两个文件来进行的! 加上这两个文件后,at 的工作情况其实是这样的:
在一般的 distributions 当中,由于假设系统上的所有用户都是可信任的,所以呢系统通常会保留一个空的 /etc/at.deny 文件,意思是允 许所有人使用 at 指令的意思 (您可以自行检查一下该文件). 不过,万一你不希望有某些 使用者使用 at 的话,将那个使用者的帐号写入 /etc/at.deny 即可! 一个帐号写一行.
单一工作调度的进行就使用 at 这个指令!这个指令的运行非常简单!将 at 加上一个时间即可!基本的语法如下:
事实上,当我们使用 at 时会进入一个 at shell 的环境来让使用者下达工作指令,此时,建议 你最好使用绝对路径来下达你的指令,比较不会有问题!由于指令的下达与 PATH 变量有关, 同时与当时的工作目录也有关连 (如果有牵涉到文件的话),所以呢使用绝对路径来下达 指令,会是比较一劳永逸的方法. 举例来说,你在 /tmp 下达 at now 然后输入 mail -s "test" root .bashrc , 问一下,那个 .bashrc 的文件会是在哪里?答案是 /tmp/.bashrc !因为 at 在运行时,会跑到当时下达 at 指令的那个工作目录运行!
要注意的是,如果在 at shell 内的指令并没有任何的讯息输出,那么 at 默认不会发 email 给执行者的. 如果你想要让 at 无论如何都发一封 email 告知你是否执行了指令,那么 可以使用" at -m 时间格式 "来下达指令! at 就会传送一个讯息给执行者,而不论该指令执行有无讯息输出了!
如果要在某某时刻,在我的终端机显示出 Hello 的字样,可以通过终端机的设备来处理!假如你在 tty1 登陆(在命令行里面输入 tty 可以查看),则可以使用 echo "Hello" /dev/tty1 .
at 有另外一个很棒的优点, 由于 at 工作调度的使用上,系统会将该项 at 工作独立出你的 bash 环境中, 直接交给系统的 atd 程序来接管,所以呢,当你下达了 at 的工作之后就可以立刻离线了, 剩下的工作就完全交 给 Linux 管理即可!所以如果有长时间的网络工作时,使用 at 可以让你免除网络断线后的困扰.
什么是"整分钟时间"呢?不论是 at 还是 crontab,他们最小的时间单位是"分 钟",所以,基本上,他们的工作是"每分钟检查一次"来处理的! 就是整分 (秒为 0 的时候),同时,你会发现其实 batch 也是使用 atq/atrm 来管理的!
以上就是土嘎嘎小编为大家整理的linux里面atd命令的简单介绍linux里面atd命令的简单介绍相关咨询咨询主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!