一、定义

at命令:定时任务,指定一个时间执行一个任务,只能执行一次。

二、选项

三、示例

1. 使用 student 用户,创建一个任务,2 分钟以后执行,在/home/student/at.txt(如果不存在,就创建)中追加一行,内容是 date 命令输出结果

[student@desktop1 ~]$ at now +2minutes
at> echo $(date) >> /home/student/at.txt
at> <EOT>
job 10 at Thu Nov 3 11:20:00 2016

2. 用 atq 检查 student 用户的任务列表,可看到上一步的任务

[student@desktop1 ~]$ atq
10 Thu Nov 3 11:20:00 2016 a student

3. 删除上一步创建的任务,并查看

[student@desktop1 ~]$ atrm
[student@desktop1 ~]$ atq
[student@desktop1 ~]$

4. 切换到root用户,创建root用户的一次性任务,打印“$USER $(date)”的输出追加 到/home/student/at.txt 文件中

然后回到 student 用户,用 atq 检查任务,他是无法看到 root(其他用户的)的任务的

[root@desktop1 ~]# at now +2minutes
at> echo $USER $(date) >> /home/student/at.txt
at> <EOT>
job at Thu Nov ::
[root@desktop1 ~]# su - student
Last login: Thu Nov :: CST on pts/
[student@desktop1 ~]$ atq
[student@desktop1 ~]$

5. student 也创建一个任务,2 分钟后执行,执行的操作和步骤 4 一样,现在 2 个用户(root和student)都有任务等待执行

[student@desktop1 ~]$ at now +2minutes
at> echo $USER $(date) >> /home/student/at.txt
at> <EOT>
job at Thu Nov ::
[student@desktop1 ~]$

6.用 root 用户执行 atq 检查任务,root 用户是可以看到所有用户的任务的

[root@desktop1 ~]# atq
Thu Nov :: a root
Thu Nov :: a student

7. 回到student用户,该用户只能查看自己的任务

[student@desktop1 ~]$ atq
Thu Nov :: a student

8 切换到 root 用户,删除前面创建的 2 个任务,确保 at 列表是空的

[root@desktop1 ~]# atrm
[root@desktop1 ~]# atrm
[root@desktop1 ~]# atq
[root@desktop1 ~]#

9. 使用 student 用户,创建一个任务,在今年的 12 月 31 日,上午 10 点,执行 reboot 命令

[student@desktop1 ~]$ at 10am Dec
at> reboot
at> <EOT>
job at Sat Dec ::
[student@desktop1 ~]$

10. 使用 student 用户,创建一个任务,10 小时后执行,重启 sshd 服务

[student@desktop1 ~]$ at now +10hours
at> systemctl restart sshd
at> <EOT>
job at Thu Nov ::
[student@desktop1 ~]$

11. 使用 student 用户,创建一个任务,3 天后的下午 10 点执行,重启 rsyslogd 服务

[student@desktop1 ~]$ at 10pm +3days
at> systemctl restart rsyslogd.service
at> <EOT>
job at Sun Nov ::
[student@desktop1 ~]$

12. 使用 student 用户,创建一个任务,2016 年 12 月 31 日(用 MMDDCCYY 表示)的 23: 59 分,执行 poweroff 命令

[student@desktop1 ~]$ at :
at> poweroff
at> <EOT>
job at Sat Dec ::
[student@desktop1 ~]$

13. 检查最后一个任务的执行脚本,看到最后的 shell 命令即可

[student@desktop1 ~]$ at -c
#!/bin/sh
# atrun uid= gid=
# mail root
umask
XDG_VTNR=; export XDG_VTNR
XDG_SESSION_ID=; export XDG_SESSION_ID
HOSTNAME=desktop1.example.com; export HOSTNAME
SHELL=/bin/bash; export SHELL
HISTSIZE=; export HISTSIZE
USER=student; export USER
LS_COLORS=rs=:di=\;\;:ln=\;\;:mh=\;\;\;:pi=\;\;\;:so=\;\;:do=\;\;:bd=\;\;\;\;\;:cd=\;\;2
...
\;\;:\*.oga=\;\;:\*.spx=\;\;:\*.xspf=\;\;:; export LS_COLORS
MAIL=/var/spool/mail/student; export MAIL
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/student/.local/bin:/home/student/bin; export PATH
PWD=/home/student; export PWD
LANG=en_US.UTF-; export LANG
HISTCONTROL=ignoredups; export HISTCONTROL
SHLVL=; export SHLVL
XDG_SEAT=seat0; export XDG_SEAT
HOME=/home/student; export HOME
LOGNAME=student; export LOGNAME
LESSOPEN=\|\|/usr/bin/lesspipe.sh\ %s; export LESSOPEN
cd /home/student || {
echo 'Execution directory inaccessible' >&
exit
}
${SHELL:-/bin/sh} << 'marcinDELIMITER5d48d7d0'
poweroff marcinDELIMITER5d48d7d0

14. 检查/var/spool/at 目录也能看到上面的脚本

[root@desktop1 ~]# ll /var/spool/at/
total
-rwx------. student student Nov : a0000f01792f38
-rwx------. student student Nov : a000100177ebb5
-rwx------. student student Nov : a000110177fca8
-rwx------. student student Nov : a000120179327f
drwx------. daemon daemon Nov : spool
[root@desktop1 ~]#

15. 创建一个 y 队列的任务,时间是 3 分钟后(用确切时间如 11:55 表示),向/home/student/at.txt 文件追加 Y 字符

[root@desktop1 ~]# at -q y :
at> echo Y >> /home/student/at.txt
at> <EOT>
job at Thu Nov ::

16. 创建一个 x 队列的任务,时间和上一步任务的时间完全一样,向/home/student/at.txt 文件追加 X 字符,模拟同一时刻有 2 个任务需要执行

[root@desktop1 ~]# at -q x :
at> echo X >> /home/student/at.txt
at> <EOT>
job at Thu Nov ::

17. 用 atq 检查 2 个任务,确认时间是一样的,队列分别是 y 和 x

[root@desktop1 ~]# atq
Sat Dec :: a student
Thu Nov :: a student
Sun Nov :: a student
Sat Dec :: a student
Thu Nov :: y root
Thu Nov :: x root

18. 等到 x 和 y 队列的 2 个任务执行后(过了他们的执行时间),用 tail 命令检查 /home/student/at.txt 文件,看到 X 在上面,

Y 在下面,说明先执行的 x 队列后执行 y 队 列(同一时刻有 2 个任务,队列的字母排在前面的先执行)

[root@desktop1 ~]# tail /home/student/at.txt
root Thu Nov :: CST
X
Y
[root@desktop1 ~]#

19. 用 root 用户,编辑/etc/at.deny , 使 student 用户没有创建一次性任务的权限

[root@desktop1 ~]# echo "student" >> /etc/at.deny
[root@desktop1 ~]# su - student
Last login: Thu Nov :: CST on pts/
[student@desktop1 ~]$ at now +3hours
You do not have permission to use at.
[student@desktop1 ~]$

20. 用 root 用户,创建和边界/etc/at.allow ,授予 student 用户创建一次性任务的权限,

现在 student 是可以用 at 命令的,因为 at.allow 优先于 at.deny

[root@desktop1 ~]# echo "student" >> /etc/at.allow
[root@desktop1 ~]# su - student
Last login: Thu Nov :: CST on pts/
[student@desktop1 ~]$ at now +3hours
at> <EOT>
job at Thu Nov ::
[student@desktop1 ~]$

Linux实施一次性任务的更多相关文章

  1. Linux之一次性安装开发工具:yum groupinstall Development tools

    [spark@sparksinglenode ~]$ yum grouplist | moreLoaded plugins: fastestmirror, refresh-packagekit, se ...

  2. linux commands - 一次性解压多个tar.gz文件

    tar -zxvf list所有tar.gz文件,然后利用xargs将其作为参数传给tar命令.-n 1表示每次传一个参数. xargs: https://www.cnblogs.com/wangqi ...

  3. (转载)linux中设备文件配置程序udev详解

    如果你使用Linux比较长时间了,那你就知道,在对待设备文件这块,Linux改变了几次策略.在Linux早期,设备文件仅仅是是一些带有适当的属性集的普通文件,它由mknod命令创建,文件存放在/dev ...

  4. LINUX下 Udev详解

    如果你使用Linux比较长时间了,那你就知道,在对待设备文件这块,Linux改变了几次策略.在Linux早期,设备文件仅仅是是一些带有适当的属性集的普通文件,它由mknod命令创建,文件存放在/dev ...

  5. 一段关于 Unix、Linux 和 Windows 的暗黑史

    “SCO 在言语上变得越来越好斗,而且还拒绝展示有关诉讼的任何证据,一切都似乎在表明,SCO只不过是在那里拉虎皮做大旗地狂言乱语.但是,微软 决不会轻易放弃这么可以一个利用这些狂言乱语的好机会.”20 ...

  6. [转帖]一段关于Unix与 Linux的暗黑史

    一段关于Unix与 Linux的暗黑史 https://blog.csdn.net/a343315623/article/details/51436715 微软曾经开发过 MS-DOS Xenix O ...

  7. linux下udev

    如果你使用Linux比较长时间了,那你就知道,在对待设备文件这块,Linux改变了几次策略.在Linux早期,设备文件仅仅是是一些带有适当的属性集的普通文件,它由mknod命令创建,文件存放在/dev ...

  8. linux udev学习

    自2.6 核心开始,就可以使用udev 协助管理系统中各设备名称.例如,磁盘设备排序.网卡设备排序等.udev能动态地在/dev 目录里产生自定义的.标识性强的设备文件或设备链接.本文即以红旗Asia ...

  9. Linux的任务计划管理

    在手机中,我们常常使用备忘录或者是闹钟等来提醒我们该做什么事情了,在Linux操作系统中,也有类似的操作.   在Linux中除了用户即时执行的命令操作以外,还可以配置在指定的时间.指定的日期执行预先 ...

随机推荐

  1. [原创] zabbix学习之旅二:yum安装

    对于允许连接公网的环境下,显然通过yum安装是最为简单方便的,也是官网推荐的安装方式.通过这种方式安装,会将php.apache.zabbix本身都一并安装,解决了烦人的依赖包问题.   本文将介绍如 ...

  2. python 关键字参数

    原文地址:http://docs.pythontab.com/python/python3.4/controlflow.html#tut-functions 函数可以通过 关键字参数 的形式来调用,形 ...

  3. Codeforces Round #249 (Div. 2) D. Special Grid 枚举

    题目链接: http://codeforces.com/contest/435/problem/D D. Special Grid time limit per test:4 secondsmemor ...

  4. shell编程之数组和关联数组

    一.数组类似c语言的数组 1.两种赋值方式 可以整体定义数组:ARRAY_NAME=(value0 value1 value2 value3 ...) 此时数组的下标默认是从0开始的 还可以单独定义数 ...

  5. 【BZOJ】【1986】【USACO 2004 Dec】/【POJ】【2373】划区灌溉

    DP/单调队列优化 首先不考虑奶牛的喜欢区间,dp方程当然是比较显然的:$ f[i]=min(f[k])+1,i-2*b \leq k \leq i-2*a $  当然这里的$i$和$k$都是偶数啦~ ...

  6. SpringMVC:com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax;

    今天用SpringMVC做修改添加操作,之前的操作都实现了添加修改,但始终报com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have ...

  7. 剑指offer--面试题20

    题目:从外向里顺时针打印矩阵 做题心得:该题本质上并未考查复杂的数据结构及算法,而是考查了快速找规律的能力!!! 要想作出此题,必须先有绝对清晰的思路,否则越写越乱(因为涉及到很多的循环打印) 自己当 ...

  8. 博弈论入门小结 分类: ACM TYPE 2014-08-31 10:15 73人阅读 评论(0) 收藏

    文章原地址:http://blog.csdn.net/zhangxiang0125/article/details/6174639 博弈论:是二人或多人在平等的对局中各自利用对方的策略变换自己的对抗策 ...

  9. ffmpeg iOS 编译

    编译模拟器版本1 到https://github.com/yuvi/gas-preprocessor下载gas-preprocessor.p并拷贝到/usr/sbin目录中2 下载ffmpeg源码.h ...

  10. 【bzoj1012】[JSOI2008]最大数maxnumber

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 8339  Solved: 3624[Submi ...