热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

每天一个Linux命令(46):at

在windows下,系统提供了计划任务功能,我们可以在“控制面板-性能与维护-任务计划”找到,它用于安排自动运行的任务。通过“添加任务

在windows下,系统提供了计划任务功能,我们可以在“控制面板 -> 性能与维护 -> 任务计划”找到,它用于安排自动运行的任务。通过“添加任务计划”引导,我们可建立一个定时执行的任务。

在linux下,你可能已经发现系统常常自动地执行一些任务,是谁在支配它们工作?在某个时间点,你想让备份程序自动执行,这该怎么做?例行的工作又分为一次性定时工作与循环定时工作,哪些进程在负责这些?如果你想在老婆生日的前一天,发出一封信提醒自己不要忘记,又该怎么做?

一次性定时计划任务at,可以实现。

1. 命令格式

at [参数] [时间]

2. 命令功能

在一个指定的时间,执行一次性的定时计划任务。需要在系统中安装at命令包,并开启守护进程atd

3. 命令参数

-m,当指定的任务完成之后,将给用户发送邮件,即使没有标准输出

-I,atq的别名

-d,atrm的别名

-v,显示任务被执行的时间

-c,打印任务的内容到标准输出

-V,显示版本信息

-q <列队>&#xff0c;使用指定的列队

-f <文件>&#xff0c;从指定文件读入任务&#xff0c;而不是从标准输入读入

-t <时间参数>&#xff0c;以时间参数的形式&#xff0c;提交要运行的任务

at使用一套相当复杂的方法来指定时间&#xff1a;绝对计时法&#xff0c;相对计时法&#xff0c;

  • 绝对计时法

    • 在当天&#xff0c;以hh&#xff1a;mm&#xff08;小时&#xff1a;分钟&#xff09;格式来指定时间&#xff0c;假如该时间已经过去&#xff0c;那么就放在第二天执行。

    • 可以使用midnight&#xff08;深夜&#xff09;&#xff0c;noon&#xff08;中午&#xff09;&#xff0c;teatime&#xff08;饮茶时间&#xff0c;一般是下午4点&#xff09;等模糊词语来指定时间。

    • 可以采用12小时制&#xff0c;即在时间后加上AM&#xff08;上午&#xff09;或PM&#xff08;下午&#xff09;来说明是上午还是下午。

    • 指定命令执行的具体日期&#xff0c;格式为month day&#xff08;月 日&#xff09;&#xff0c;mm/dd/yy&#xff08;月/日/年&#xff09;&#xff0c;dd.mm.yy&#xff08;日.月.年&#xff09;&#xff0c;指定的日期必须跟在指定时间的后面。

还可以使用相对计时法&#xff0c;这对于制定不久就要执行的任务很有好处。

  • 相对计时法

    • 格式&#xff1a;now&#43;count time-units&#xff0c;其中now是当前时间&#xff1b;count是时间数量&#xff0c;可取几小时&#xff0c;几天等&#xff1b;time-units是时间单位&#xff0c;可以是minutes&#xff08;分钟&#xff09;&#xff0c;hours&#xff08;小时&#xff09;&#xff0c;days&#xff08;天&#xff09;&#xff0c;weeks&#xff08;星期&#xff09;。

另一种计时方法是直接使用today&#xff08;今天&#xff09;、tomorrow&#xff08;明天&#xff09;来指定完成命令的时间。

  • TIME&#xff1a;时间格式&#xff0c;这里可以定义什么时间&#xff0c;进行at任务。格式有&#xff1a;

HH:MM
ex> 04:00

  • 在今日的HH:MM时刻进行&#xff0c;若该时刻已经超过&#xff0c;则在明天的HH:MM执行此任务。

HH:MM YYYY-MM-DDex> 04:00 2009-03-17

  • 在某年某月某日某时刻&#xff0c;强制执行该项任务

HH:MM[am|pm] [Month] [Date]ex> 04pm March 17

  • 在某年某月某日的某时刻&#xff0c;强制进行该项任务

HH:MM[am|pm] &#43; number [minutes|hours|days|weeks]ex> now &#43; 5 minutesex> 04pm &#43; 3 days

也就是说&#xff0c;在某个时间点再加几个时间段后&#xff0c;才进行该项任务。

4. 使用实例

例一&#xff1a;安装at命令&#xff0c;并启动atd服务

命令&#xff1a;

/etc/init.d/atd {start|stop|restart|condrestart|status} // []表示可以省略的选项&#xff0c;{}表示必要选项&#xff0c;|表示或

说明&#xff1a;要使用一次性计划任务时&#xff0c;Linux必须启动负责此任务的服务进程&#xff0c;即atd服务。 然而并非所有的Linux发行版都默认将其启动。因此&#xff0c;我们需要手动开启atd服务。

# /etc/init.d/atd stop停止 atd&#xff1a;[确定]# ps -ef|grep atdroot 25062 24951 0 14:53 pts/0 00:00:00 grep atd# /etc/init.d/atd start[确定] td&#xff1a;[确定]# ps -ef|grep atdroot 25068 1 0 14:53 ? 00:00:00 /usr/sbin/atd
root 25071 24951 0 14:53 pts/0 00:00:00 grep atd# /etc/init.d/atd restart停止 atd&#xff1a;[确定]
[确定]td&#xff1a;[确定]# systemctl enable atd // 开机自启动


例二&#xff1a;在三天后的下午5点&#xff0c;执行/bin/ls

命令&#xff1a;at 5pm &#43; 3 days

# at 5pm &#43; 3 daysat> /bin/ls
at>
job 7 at 2013-01-08 17:00

说明&#xff1a;退出at命令&#xff0c;要用ctrl&#43;d


例三&#xff1a;明天17点钟&#xff0c;输出时间到指定文件

命令&#xff1a;at 17:20 tomorrow

# at 17:20 tomorrowat> date > /root/2013.log
at>
job 8 at 2013-01-06 17:20


例四&#xff1a;在执行计划任务之前&#xff0c;用atq查看系统有无此任务计划

命令&#xff1a;atq

# atq8 2013-01-06 17:20 a root
7 2013-01-08 17:00 a root


例五&#xff1a;删除已经设置的任务

命令&#xff1a;at rm 7

# atq8 2013-01-06 17:20 a root
7 2013-01-08 17:00 a root# atrm 7 // 删除序号# atq8 2013-01-06 17:20 a root


例六&#xff1a;显示已经设置的计划任务内容

命令&#xff1a;at -c 8

# at -c 8 // 显示8号任务的内容#!/bin/sh
# atrun uid&#61;0 gid&#61;0# mail root 0umask 22此处省略n个字符date > /root/2013.log

5. at权限控制

既然是计划任务&#xff0c;那么系统应该有相应的执行方式&#xff0c;并将这些计划任务排进任务列表。事实上&#xff0c;我们使用at产生所要运行的计划任务&#xff0c;并以文件的形式写入/var/spool/at/目录内&#xff0c;该工作便能等待atd的取用与运行。

考虑到系统安全&#xff0c;并不是所有人都可以执行at计划任务。在遭受黑客攻击后&#xff0c;主机当中多了许多黑客程序&#xff0c;这些程序非常可能是运用一些计划任务来运行或搜集系统的运行信息&#xff0c;并定时发送给黑客。所以除非是你认可的帐号&#xff0c;否则不要让其他用户使用at。

那怎样达到安全可控地使用at呢?

我们可以使用/etc/at.allow和/etc/at.deny来限制at的使用&#xff0c;加上这两个文件后&#xff0c; at 的工作情况是这样的&#xff1a;

  1. 先找到/etc/at.allow文件&#xff0c;写在这个文件中的用户才能使用at&#xff0c;没有写在文件中的用户&#xff0c;则不能使用at (即使没有写在at.deny文件中)

  2. 如果/etc/at.allow不存在&#xff0c;就寻找/etc/at.deny文件。写在at.deny的用户&#xff0c;不能使用at&#xff0c;没有写在at.deny文件的用户&#xff0c;可以使用at命令。

  3. 如果两个文件都不存在&#xff0c;那只有root用户可以使用at。

通过这个说明&#xff0c;我们知道/etc/at.allow是较为严格的管理方式&#xff0c;而/etc/at.deny则较为松散。因为帐号没有在该文件中&#xff0c;就能运行at。

在一般的linux发行版中&#xff0c;系统假设所有用户都是可信的&#xff0c;因此通常会保留一个空的/etc/at.deny文件&#xff0c;意思是允许所有用户使用at(你可以自行检查一下该文件)。如果不希望某些用户使用at的话&#xff0c;你可以将用户名写入/etc/at.deny中&#xff0c;一个帐号写一行。


推荐阅读
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • 通常情况下,修改my.cnf配置文件后需要重启MySQL服务才能使新参数生效。然而,通过特定命令可以在不重启服务的情况下实现配置的即时更新。本文将详细介绍如何在线调整MySQL配置,并验证其有效性。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文介绍如何从JSON格式的文件中提取数据并将其分配给Bash脚本中的变量。我们将探讨具体的命令和工具,帮助你高效地完成这一任务。 ... [详细]
  • 版本控制工具——Git常用操作(下)
    本文由云+社区发表作者:工程师小熊摘要:上一集我们一起入门学习了git的基本概念和git常用的操作,包括提交和同步代码、使用分支、出现代码冲突的解决办法、紧急保存现场和恢复 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
author-avatar
小麻雀yuuri
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有