在linux系统中你可能已经发现了为什么系统常常会自动的进行一些任务?这些任务到底是谁在支配他们工作的?

在linux系统如果你想要让自己设计的备份程序可以自动在某个时间点开始在系统底下运行,而不需要手动来启动它,又该如何处置呢?

这些例行的工作可能又分为一次性定时工作与循环定时工作,在系统内又是哪些服务在负责?

还有,如果你想要每年在老婆的生日前一天就发出一封信件提醒自己不要忘记,linux系统下该怎么做呢?

今天我们主要学习一下一次性定时计划任务的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<时间参数> 以时间参数的形式提交要运行的任务

at允许使用一套相当复杂的指定时间的方法。它能够接受在当天的hh:mm(小时:分钟)式的时间指定。

假如该时间已过去,那么就放在第二天执行。

当然也能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的 词语来指定时间。

用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。

也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。

上面介绍的都是绝对计时法,其实还能够使用相对计时法,这对于安排不久就要执行的命令是很有好处的。

指定格式为:now + count time-units ,

now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。

count是时间的数量,究竟是几天,还是几小时,等等。 更有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。

time:时间格式,这里可以定义出什么时候要进行 at 这项任务的时间,格式有:HH:MMx> 04:00

在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此任务。HH:MM YYYY-MM-DD   ex> 04:00 2009-03-17

强制规定在某年某月的某一天的特殊时刻进行该项任务。 HH:MM[am|pm] [Month] [Date]ex> 04pm March 17

也是一样,强制在某年某月某日的某时刻进行该项任务 HH:MM[am|pm] + number [minutes|hours|days|weeks]

ex> now + 5 minutes

ex> 04pm + 3 days

就是说,在某个时间点再加几个时间后才进行该项任务。

inux at命令如何保存退出:输入"at  指定的时间"之后回车,然后输入要运行的命令,回车,按组合键Ctrl+D

4.使用实例:

4.1 三天后的下午5点锺执行/bin/ls

命令:at 5pm+3 days

[moiaopr@CNSZ443239 ~]$ at 5pm+3 days

at> /bin/ls

at>  

at>

job 9 at 2016-11-24 17:00

4.2 明天17点钟,输出时间到指定文件内

命令:at 17:20 tomorrow

[moiaopr@CNSZ443239 ~]$ at 17:20 tomorrow

at> ls test01.txt

at>

job 10 at 2016-11-22 17:20

4.3 计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务

命令:atq

[moiaopr@CNSZ443239 ~]$ atq

3       2016-11-24 17:00 a moiaopr

10      2016-11-22 17:20 a moiaopr

9       2016-11-24 17:00 a moiaopr

4       2016-11-21 22:00 a moiaopr

5       2016-11-24 17:00 a moiaopr

4.4 显示已经设置的任务内容

命令:at -c 8

[moiaopr@CNSZ443239 ~]$ atq

11      2016-11-21 16:55 a moiaopr

[moiaopr@CNSZ443239 ~]$ at -c 11

!/bin/sh

atrun uid=4010 gid=3020

mail moiaopr 0

umask 27

......

4.5 删除已经设置的任务

命令:atrm 7

[moiaopr@CNSZ443239 ~]$ atq

3       2016-11-24 17:00 a moiaopr

9       2016-11-24 17:00 a moiaopr

4       2016-11-21 22:00 a moiaopr

5       2016-11-24 17:00 a moiaopr

6       2016-11-22 17:00 a moiaopr

1       2016-11-24 17:00 a moiaopr

7       2016-11-21 16:37 a moiaopr

2       2016-11-24 17:00 a moiaopr

[moiaopr@CNSZ443239 ~]$ atrm 9

[moiaopr@CNSZ443239 ~]$ atrm 7

[moiaopr@CNSZ443239 ~]$ atrm 6

[moiaopr@CNSZ443239 ~]$ atrm 5

[moiaopr@CNSZ443239 ~]$ atrm 4

[moiaopr@CNSZ443239 ~]$ atq

3       2016-11-24 17:00 a moiaopr

1       2016-11-24 17:00 a moiaopr

2       2016-11-24 17:00 a moiaopr

5.atd的启动与at运行的方式:

5.1 atd 的启动

要使用一次性计划任务时,我们的 Linux 系统上面必须要有负责这个计划任务的服务,那就是 atd 服务。 

不过的方法很简单,就是这样:

并非所有的 Linux distributions都默认会把他打开的,所以,某些时刻我们需要手动将atd 服务激活才行。 

激活

命令:

/etc/init.d/atd start 

/etc/init.d/atd restart

说明:

/etc/init.d/atd start 没有启动的时候,直接启动atd服务

/etc/init.d/atd restart 服务已经启动后,重启atd服务

5.2 配置一下启动时就启动这个服务,免得每次重新启动都得再来一次

命令:

chkconfig atd on

输出:

[root@localhost /]# chkconfig atd on

[root@localhost /]#

5.3 at 的运行方式

既然是计划任务,那么应该会有任务执行的方式,并且将这些任务排进行程表中。那么产生计划任务的方式是怎么进行的?

事实上,我们使用at这个命令来产生所要运行的计划任务,并将这个计划任务以文字档的方式写入/var/spool/at/目录内,该工作便能等待 atd 这个服务的取用与运行了。就这么简单。不过,并不是所有的人都可以进行 at 计划任务。为什么? 因为系统安全的原因。很多主机被所谓的攻击破解后,最常发现的就是他们的系统当中多了很多的黑客程序,这些程序非常可能运用一些计划任务来运行或搜集你的系统运行信息,并定时的发送给黑客。 所以,除非是你认可的帐号,否则先不要让他们使用 at 命令。那怎么达到使用 at 的可控呢?

我们可以利用 /etc/at.allow 与 /etc/at.deny 这两个文件来进行 at 的使用限制。加上这两个文件后, at 的工作情况是这样的:

先找寻 /etc/at.allow 这个文件,写在这个文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中);

如果 /etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用者,就可以使用 at 命令了。

如果两个文件都不存在,那么只有 root 可以使用 at 这个命令。

透过这个说明,我们知道 /etc/at.allow 是管理较为严格的方式,而 /etc/at.deny 则较为松散 (因为帐号没有在该文件中,就能够运行 at 了)。在一般的 distributions 当中,

由于假设系统上的所有用户都是可信任的, 因此系统通常会保留一个空的 /etc/at.deny 文件,意思是允许所有人使用 at 命令的意思 (您可以自行检查一下该文件)。 

不过,万一你不希望有某些使用者使用 at 的话,将那个使用者的帐号写入 /etc/at.deny 即可! 一个帐号写一行。

at命令用法详解的更多相关文章

  1. systemctl命令用法详解

    systemctl命令用法详解系统环境:Fedora 16binpath:/bin/systemctlpackage:systemd-units systemctl enable httpd.serv ...

  2. Ubuntu kill命令用法详解

    转自:Ubuntu kill命令用法详解 1. kill   作用:根据进程号杀死进程   用法: kill [信号代码] 进程ID   root@fcola:/# ps -ef | grep sen ...

  3. install 命令用法详解

    install 命令用法详解 http://man.linuxde.net/install install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户.install命令和cp命令类似 ...

  4. Linux下find命令用法详解

    Linux下find命令用法详解   学神VIP烟火 学神IT教育:XueGod-IT   最负责任的线上直播教育平台   本文作者为VIP学员 烟火   第一部分:根据文件名查找   1.在当前目录 ...

  5. lsof 命令用法详解

    lsof 命令用法详解 作用 用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP.UDP).找回/恢复删除的文件.是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所 ...

  6. Linux Shell脚本入门--wget 命令用法详解

    Linux Shell脚本入门--wget 命令用法详解 wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能 ...

  7. (转)linux paste命令用法详解

    linux paste命令用法详解原文:http://www.xfcodes.com/linuxcmd/mulu/10211.htmlinux下paste命令,可用于合并文件的列. 功能说明:合并文件 ...

  8. CentOS 7.X 中systemctl命令用法详解

    systemctl是RHEL 7 的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体.可以使用它永久性或只在当前会话中启用/禁用服务,下面来看CentOS 7.X 中 ...

  9. [转帖]强大的strace命令用法详解

    强大的strace命令用法详解 文章转自: https://www.linuxidc.com/Linux/2018-01/150654.htm strace是什么? 按照strace官网的描述, st ...

  10. Mysql导入导出工具Mysqldump和Source命令用法详解

    Mysql本身提供了命令行导出工具Mysqldump和Mysql Source导入命令进行SQL数据导入导出工作,通过Mysql命令行导出工具Mysqldump命令能够将Mysql数据导出为文本格式( ...

随机推荐

  1. Redis分布式锁的正确姿势

    1. 核心代码: import redis.clients.jedis.Jedis; import java.util.Collections; /** * @Author: qijigui * @C ...

  2. MySQL 主从复制:基于二进制文件复制配置详解

    MySQL-主从复制:基于二进制文件复制详解 前言 主从复制是指把一个MySQL的数据库服务器作为主服务器(master),然后把master的数据复制到一个或者多个MySQL数据库服务器作为从服务器 ...

  3. 双系统情况下,ubuntu开机挂载Windows分区

    首先:blkid,查看分区所属uuid 其中 /dev/sda5 就是Windows分区 其次:fdisk -l,查看分区情况 通过硬盘大小找到对应要设置的具体分区(其实这步也不用,我只是为了确定) ...

  4. auth权限逻辑

    下面本人为大家讲解一下如何实现auth权限, 第一步,新建Auth.php,复制下面的代码,把注释中的表都创建一下.把文件放到extend新建文件夹org放进去即可, <?php // +--- ...

  5. [http 1.1] M-POST w3

    5. Mandatory HTTP Requests An HTTP request is called a mandatory request if it includes at least one ...

  6. [Qt] 去除窗体右上角的问号

    this->setWindowFlags(windowFlags()&~Qt::WindowContextHelpButtonHint);

  7. 在Spring Boot使用H2内存数据库

    文章目录 添加依赖配置 数据库配置 添加初始数据 访问H2数据库 在Spring Boot使用H2内存数据库 在之前的文章中我们有提到在Spring Boot中使用H2内存数据库方便开发和测试.本文我 ...

  8. Handler 机制(一)—— Handler的实现流程

    由于Android采用的是单线程模式,开发者无法在子线程中更新 UI,所以系统给我提供了 Handler 这个类来实现 UI 更新问题.本贴主要说明 Handler 的工作流程. 1. Handler ...

  9. js之 DOM与BOM

    JavaScript HTML DOM (文档对象模型)(Document Object Model) 什么是DOM? DOM是W3C标准. DOM定义了访问文档的标准: “W3C文档对象模型(DOM ...

  10. vue2.x学习笔记(二十八)

    接着前面的内容:https://www.cnblogs.com/yanggb/p/12682573.html. 生产环境部署 以下大多数内容在你使用vue cli的时候都是默认开启的,仅跟你自定义的构 ...