at命令
来源:互联网 发布:淘宝网手动碎 菜机 编辑:程序博客网 时间:2024/06/05 08:25
at命令简介
Linux at命令可以让使用者指定在 TIME 这个特定时刻执行某个程序或指令
语法
at [option] TIME
常用选项
-V 显示版本信息:-l: 列出指定队列中等待运行的作业;相当于atq-d: 删除指定的作业;相当于atrm-c: 查看具体作业任务-f /path/from/somefile:从指定的文件中读取任务-m:当任务被完成之后,将给用户发送邮件,即使没有标准输出
- 注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户
TIME: 定义出什么时候进行 at 这项任务的时间
HH:MM [YYYY-mm-dd] noon(中午12:00), midnight(午夜00:00), teatime(4pm,下午4:00) tomorrow(明天) now+#{minutes,hours,days, OR weeks},从现在开始多长时间之后
时间格式
HH:MM 02:00
在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务
HH:MM YYYY-MM-DD 02:00 2016-09-20
规定在某年某月的某一天的特殊时刻进行该项任务
HH:MM[am|pm] [Month] [Date]
04pm March 17
,3月17日下午4:0017:20 tomorrow
,明天17:20HH:MM[am|pm] + number [minutes|hours|days|weeks]
从现在开始多长时间之后才进行该项任务
now + 5 minutes
,从现在开始五分钟后02pm + 3 days
,三天后的下午2:00
at任务执行方式
交互式
[root@centos6 ~]# at 12:00
at> ifconfig
at>
job 1 at 2017-08-24 12:00输入重定向
[root@centos6 ~]# at 15:00 << END
ifconfig
echo hello haiyun
END
job 2 at 2017-08-24 15:00at –f 文件
[root@centos6 ~]# echo ifconfig > at.txt
[root@centos6 ~]# at 12:00 -f at.txt
job 3 at 2017-08-24 12:00
/etc/at.{allow,deny}
控制用户是否能执行at任务
/etc/at.{allow,deny}
控制用户是否能执行at任务
白名单:
/etc/at.allow
默认不存在,需要手动创建,只有该文件中的用户才能执行at命令,如果有at.allow
文件那么/etc/at.deny将会失效黑名单:
/etc/at.deny
默认存在,拒绝该文件中用户执行at命令, 而没有在at.deny 文件中的使用者则可执行
如果两个文件都不存在,只有 root 可以执行 at 命令
at工作原理
事实上,我们使用at这个命令来生成所要运行的工作,并将这个工作以文本文件的方式写入/var/spool/at目录内,该工作便能等待atd这个服务的去用与执行了。
at队列存放在/var/spool/at目录中
atd的启动
- 依赖与atd服务,需要启动才能实现at任务
centos 6:
[root@centos6 ~]# service atd start
centos 7:
[root@centos7 ~]# systemctl start atd
查看是否安装at包
[root@centos7 ~]# rpm -q at <==查看at包是否安装at-3.1.13-22.el7.x86_64[root@centos7 ~]# rpm -ql at <==查看at安装完成后生成的所有文件/etc/at.deny/etc/pam.d/atd/etc/sysconfig/atd/usr/bin/at/usr/bin/atq/usr/bin/atrm/usr/bin/batch/usr/lib/systemd/system/atd.service/usr/sbin/atd/usr/sbin/atrun/usr/share/doc/at-3.1.13/usr/share/doc/at-3.1.13/ChangeLog/usr/share/doc/at-3.1.13/Copyright/usr/share/doc/at-3.1.13/Problems/usr/share/doc/at-3.1.13/README/usr/share/doc/at-3.1.13/timespec/usr/share/man/man1/at.1.gz/usr/share/man/man1/atq.1.gz/usr/share/man/man1/atrm.1.gz/usr/share/man/man1/batch.1.gz/usr/share/man/man5/at.allow.5.gz/usr/share/man/man5/at.deny.5.gz/usr/share/man/man8/atd.8.gz/usr/share/man/man8/atrun.8.gz/var/spool/at/var/spool/at/.SEQ/var/spool/at/spool[root@centos7 ~]# rpm -qi at <==查看at包的相关信息Name : atVersion : 3.1.13Release : 22.el7Architecture: x86_64Install Date: Wed 23 Aug 2017 09:45:15 AM CSTGroup : System Environment/DaemonsSize : 97524License : GPLv3+ and GPLv2+ and ISC and MIT and Public DomainSignature : RSA/SHA256, Mon 21 Nov 2016 01:07:58 AM CST, Key ID 24c6a8a7f4a80eb5Source RPM : at-3.1.13-22.el7.src.rpmBuild Date : Sun 06 Nov 2016 02:16:27 AM CSTBuild Host : worker1.bsys.centos.orgRelocations : (not relocatable)Packager : CentOS BuildSystem <http://bugs.centos.org>Vendor : CentOSURL : http://ftp.debian.org/debian/pool/main/a/atSummary : Job spooling toolsDescription :At and batch read commands from standard input or from a specifiedfile. At allows you to specify that a command will be run at aparticular time. Batch will execute commands when the system loadlevels drop to a particular level. Both commands use user's shell.You should install the at package if you need a utility fortime-oriented job control. Note: If it is a recurring job that willneed to be repeated at the same time every day/week, etc. you shoulduse crontab instead.
范例
范例一:
再过5分钟后,将/root/.bashrc寄给root自己
[root@centos6 ~]# at now + 5 minutes <==记得加sat> /bin/mail/ root -s "testing at job" < /root/.bashrc <==尽量写绝对路径,因为计划任务的PATH(环境变量)和我们当前bash的PATH是有区别的at> <EOT>job 6 at 2017-08-23 16:49
范例二:
将上述的第6项工作内容列出来查阅
[root@centos6 ~]# at -c 6#!/bin/sh# atrun uid=0 gid=0# mail root 0umask 22HOSTNAME=centos6.haiyun.com; export HOSTNAMESELINUX_ROLE_REQUESTED=; export SELINUX_ROLE_REQUESTEDSHELL=/bin/bash; export SHELLHISTSIZE=1000; export HISTSIZESSH_CLIENT=192.168.8.1\ 60005\ 22; export SSH_CLIENTSELINUX_USE_CURRENT_RANGE=; export SELINUX_USE_CURRENT_RANGESSH_TTY=/dev/pts/0; export SSH_TTYUSER=root; export USER。。。此处省略一些环境变量MAIL=/var/spool/mail/root; export MAILPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin; export PATHPWD=/root; export PWDLANG=en_US.UTF-8; export LANGSELINUX_LEVEL_REQUESTED=; export SELINUX_LEVEL_REQUESTEDHISTCONTROL=ignoredups; export HISTCONTROLSHLVL=1; export SHLVLHOME=/root; export HOMELOGNAME=root; export LOGNAMECVS_RSH=ssh; export CVS_RSHSSH_CONNECTION=192.168.8.1\ 60005\ 192.168.8.128\ 22; export SSH_CONNECTIONLESSOPEN=||/usr/bin/lesspipe.sh\ %s; export LESSOPENG_BROKEN_FILENAMES=1; export G_BROKEN_FILENAMEScd /root || { echo 'Execution directory inaccessible' >&2 exit 1}${SHELL:-/bin/sh} << 'marcinDELIMITER2eb18f7b'/bin/mail/ root -s "testing at job" < /root/.bashrc <==命令marcinDELIMITER2eb18f7b
范例三:
计划在2017-10-08 20:00关机
[root@centos6 ~]# at 20:00 2017-10-08at> /sbin/poweroff at> <EOT>job 7 at 2017-10-08 20:00
范例四:
删除上面刚刚创建的计划任务
[root@centos6 ~]# at -l <==查看计划任务列表1 2017-08-24 12:00 a root7 2017-10-08 20:00 a root3 2017-08-24 12:00 a root2 2017-08-24 15:00 a root[root@centos6 ~]# at -d 7 <==删除计划任务7[root@centos6 ~]# at -l <==再次查看已被删除1 2017-08-24 12:00 a root3 2017-08-24 12:00 a root2 2017-08-24 15:00 a root
注意事项:
atm -m
命令,当任务被完成之后,将给用户发送邮件,即使没有标准输出。因为有些命令是没有标准输出的如:useradd
,那么如果我们计划任务中写useradd添加用户,我们是看不到输出的,邮件也没有,此时-m
选项就可以强制用户发送邮件。- 计划任务中,要使用绝对路径
at.allow
要比at.deny
优先级高。如果两个文件同时存在的话,那么at.allow
生效。如果都不存在,那么就只有root用户可以使用atat
命令是有SUID
权限的
[root@centos6 ~]# ll /usr/bin/at-rwsr-xr-x. 1 root root 54464 Mar 22 08:13 /usr/bin/at
- AT命令
- AT命令
- AT命令
- AT命令
- AT命令
- at命令
- at命令
- AT命令
- AT命令
- at命令
- AT命令
- AT命令
- AT命令
- AT命令
- at命令
- at命令
- at 命令
- at命令
- 网络设备结构体net_device介绍
- #pragma pack(push,1)与#pragma pack(1)的区别
- I hate it.hdu
- LA 3942 Remember the Word——DP + 字典树
- MapStruct实体间转换
- at命令
- uva10382(贪心算法---区间覆盖问题)
- ubuntu 下ffmpeg3.3的编译
- Excel学习1_Java读取文件中的内容写入excel中
- window下MongoDB的配置与安装
- mybatis PageHelper和pageInfo的相关知识点
- adb remount 系统提示只读文件系统Read-only file system
- 【矩形】【dp】创意吃鱼法
- Python基础入门5--函数