linux命令详解之at

linux命令详解之at,第1张

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 可以让你免除网络断线后的困扰。

其实 batch 是利用 at 来进行指令的下达!只是加入一些控制参数而已。这个 batch 神奇的地方在于:他会在 CPU 的工作负载小于 0.8 的时候,才进行你所下达的工作任务啦!

那什么是工作负载 0.8 呢?这个工作负载的意思是: CPU 在单一时间点所负责的工作数量。不是CPU 的使用率喔! 举例来说,如果我有一只程序他需要一直使用 CPU 的运算功能,那么此 时 CPU 的使用率可能到达 100% , 但是 CPU 的工作负载则是趋近于“ 1 ”,因为 CPU 仅负责一个工作!如果同时执行这样的程序两支呢? CPU 的使用率还是 100% ,但是工作负载 则变成 2 了! 所以也就是说,当 CPU 的工作负载越大,代表 CPU 必须要在不同的工作之间进行频繁的工 作切换。 因为一直切换 工作,所以会导致系统忙碌啊! 系统如果很忙碌,还要额外进行 at ,不太合理!所以才有 batch 指令的产生!

下面来实验一下 batch 好了!为了产生 CPU 较高的工作负载,我们用了 计算 pi 的脚本,连续执行 4 次这只程序, 来仿真高负载,然后看看batch 的工作现象。

使用 uptime 可以观察到 1, 5, 15 分钟的“平均工作负载”量,因为是平均值,所以当我们如上 表删除掉四个工作后,工作负载不会立即降低, 需要一小段时间让这个 1 分钟平均值慢慢回 复到接近 0 啊!当小于 0.8 之后的“整分钟时间”时,atd 就会将 batch 的工作执行掉了!

什么是“整分钟时间”呢?不论是 at 还是 crontab,他们最小的时间单位是“分 钟”,所以,基本上,他们的工作是“每分钟检查一次”来处理的! 就是整分 (秒为 0 的时候),同时,你会发现其实 batch 也是使用 atq/atrm 来管理的!

与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编号

如何在特定的时间运行一个命令at命令能在您所指定的时间运行您选择的命令 例如 如果我想在上午 点钟播放CDROM中的乐曲 则键入如下命令 $ at : at>cdplay在上面的例子中 我先键入at : 然后键入回车 随后出现at命令提示符at>在这个提示符下 又键入命令cdplay 然后用结束输入 如果没有键入而输入回车 则at>会在下一行出现 这样就可以键入另一条要在 : 执行的命令 依次类推 您可以安排从 : 开始执行的一系列命令 在命令输完后 用结束输入相当于向当前输入发出了一个 文件尾 信号 因此 如果您连续按两次的话 您就会从系统中注销 下面的命令将列出所有待执行的作业 该命令会按照序号显示当前全部作业 $ at l如果要删除队列中的某个作业 使用如下命令 它将删除队列中序号为 的作业 $ at rm 下面的命令将在新的千年开始前五分钟启动X Window系统 $ at : / / at>startx如让模果一般用户无法使用at命令的话 请检查一下文件/etc/at deny和/etc/at allow 在默认配置中 系统允许所有的用户世散使用at命令 如果您只想让某些用户使用at命令 就需要创建文件/etc/at allow 并将可以使用at命令的用户列在文件中 对于at的其它可选项 请参见man at 如何设置cron我们在红旗Linux系统中默认安装了cron 它是一个Linux进程 主要用来在夜晚运坦返缓行某些后台作业 所以您一般不需要对它做任何改动 除非您想在其中增加某些作业或修改cron运行作业的时间 cron的某些作业对系统而言是基础 用来保证系统能够长时间正常工作 cron的工作主要包括 重建文件位置的数据库 这样您才能用 locate 命令查找清空/tmp目录重建用户手册进行某些检查设置 例如增加新字体我们在每天下班时不应该关闭Linux 否则cron就无法完成它的工作 如果您确实要将计算机在夜晚关闭 就应该调整cron 让它在其它时间完成必需的工作 查看/etc/crontab文件可以了解cron作业什么时候被唤醒 $ cat /etc/crontab一个可能的示例文件如下 # run parts * * * * root run parts /etc/cron hourly * * * root run parts /etc/cron daily * * root run parts /etc/cron weekly * * root run parts /etc/cron monthly 其中包括了四类作业 每小时执行一次的 每天执行一次的 每周执行一次的和每月执行一次的 您也可以修改该文件 以增加您自己的cron类别 文件中每一项的含义如下 分钟( ) 小时( ) 一月中第几天( ) 月份数( ) 星期几( 或星期天至星期六) 其中 * 表示任何有效数字 因此 每小时完成的作业记录在目录/etc/cron hourly中 这些作业每个小时的第 分钟将被执行 每天完成的作业记录在目录/etc/cron daily中 这些作业每天 点过 分执行 每周执行的作业在星期六的上午 点 分执行 每月执行的作业在每月 日上午 点 分执行 每一项的最后一列指明了当时间到了以后 要运行的命令文件的完整路径名 如果您想把早晨 点 分执行的cron作业在中午进行 把 修改为 即可 cron在每分钟都会被唤醒一次 并检查/etc/crontab是否改变 所以对cron的修改是可以立即生效的 如果您想在cron中增加自己的作业 请将您要运行的命令的脚本文件或指向脚本的链接文件拷贝到目录/etc/cron hourly或cron daily或cron weekly或cron monthly下 lishixinzhi/Article/program/Oracle/201311/18426


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12482151.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存