Linux任务计划at

Linux任务计划at

一Linux任务计划介绍


Linux任务计划、周期性任务执行
at:未来的某时间点执行一次任务
batch:系统自行选择空闲时间去执行此处指定的任务
cron:周期性运行某任务

二at计划任务

执行方式:
交互式,输入重定向,at –f 文件
依赖与atd服务,需要启动才能实现at任务,at队列存放在/var/spool/at目录中



(一)安装at包

最小化安装默认是没有安装的,光盘自带的包

[root@centos72 ~]# yum  install  at  -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package at.x86_64 0:3.1.13-23.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================
 Package             Arch                    Version                        Repository             Size
========================================================================================================
Installing:
 at                  x86_64                  3.1.13-23.el7                  base                   51 k

Transaction Summary
========================================================================================================
Install  1 Package

Total download size: 51 k
Installed size: 95 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : at-3.1.13-23.el7.x86_64                                                              1/1 
  Verifying  : at-3.1.13-23.el7.x86_64                                                              1/1 

Installed:
  at.x86_64 0:3.1.13-23.el7                                                                             

Complete!

查看包的介绍

[root@centos72 ~]# rpm  -q at
at-3.1.13-23.el7.x86_64
[root@centos72 ~]# rpm  -qi  at
Name        : at
Version     : 3.1.13
Release     : 23.el7
Architecture: x86_64
Install Date: Mon 29 Jul 2019 04:42:51 PM CST
Group       : System Environment/Daemons
Size        : 97561
License     : GPLv3+ and GPLv2+ and ISC and MIT and Public Domain
Signature   : RSA/SHA256, Wed 25 Apr 2018 06:52:49 PM CST, Key ID 24c6a8a7f4a80eb5
Source RPM  : at-3.1.13-23.el7.src.rpm
Build Date  : Wed 11 Apr 2018 08:13:35 AM CST
Build Host  : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://ftp.debian.org/debian/pool/main/a/at
Summary     : Job spooling tools
Description :
At and batch read commands from standard input or from a specified
file. At allows you to specify that a command will be run at a
particular time. Batch will execute commands when the system load
levels drop to a particular level. Both commands use user's shell.

You should install the at package if you need a utility for
time-oriented job control. Note: If it is a recurring job that will
need to be repeated at the same time every day/week, etc. you should
use crontab instead.

6版本

[root@centos65 ~]#  rpm -q  at
at-3.1.10-48.el6.x86_64
[root@centos65 ~]#  rpm -qi  at
Name        : at                           Relocations: (not relocatable)
Version     : 3.1.10                            Vendor: CentOS
Release     : 48.el6                        Build Date: Fri 20 Feb 2015 12:23:33 AM CST
Install Date: Wed 23 Jan 2019 05:30:47 PM CST      Build Host: c6b8.bsys.dev.centos.org
Group       : System Environment/Daemons    Source RPM: at-3.1.10-48.el6.src.rpm
Size        : 94221                            License: GPLv2+
Signature   : RSA/SHA1, Fri 20 Feb 2015 12:34:52 AM CST, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://ftp.debian.org/debian/pool/main/a/at
Summary     : Job spooling tools
Description :
At and batch read commands from standard input or from a specified
file. At allows you to specify that a command will be run at a
particular time. Batch will execute commands when the system load
levels drop to a particular level. Both commands use user's shell.

You should install the at package if you need a utility for
time-oriented job control. Note: If it is a recurring job that will
need to be repeated at the same time every day/week, etc. you should
use crontab instead.

(二)at包的组成

[root@centos72 ~]# rpm -ql  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

服务存放位置/etc/rc.d/init.d/atd

运行的程序/usr/sbin/atd

[root@centos65 ~]#  rpm -ql  at
/etc/at.deny
/etc/pam.d/atd
/etc/rc.d/init.d/atd
/etc/sysconfig/atd
/usr/bin/at
/usr/bin/atq
/usr/bin/atrm
/usr/bin/batch
/usr/lib64/pm-utils/sleep.d/56atd
/usr/sbin/atd
/usr/sbin/atrun
/usr/share/doc/at-3.1.10
/usr/share/doc/at-3.1.10/ChangeLog
/usr/share/doc/at-3.1.10/Copyright
/usr/share/doc/at-3.1.10/Problems
/usr/share/doc/at-3.1.10/README
/usr/share/doc/at-3.1.10/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/man8/atd.8.gz
/usr/share/man/man8/atrun.8.gz
/var/spool/at
/var/spool/at/.SEQ
/var/spool/at/spool

查看开机是否自启

因为是比较基础的服务,开机一般自启

[root@centos72 ~]# systemctl is-enabled  atd
enabled
[root@centos72 ~]# systemctl is-enabled  atd.service 
enabled
[root@centos65 ~]# chkconfig  --list  atd
atd                0:off    1:off    2:off    3:on    4:on    5:on    6:off
[root@centos65 ~]# runlevel 
N 3

服务调用了程序/usr/sbin/atd

[root@centos72 ~]# systemctl status  atd.service 
● atd.service - Job spooling tools
   Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
   Active: inactive (dead)
[root@centos72 ~]# systemctl start   atd.service 
[root@centos72 ~]# systemctl status  atd.service 
● atd.service - Job spooling tools
   Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-05-21 09:28:49 CST; 1s ago
 Main PID: 2710 (atd)
   CGroup: /system.slice/atd.service
           └─2710 /usr/sbin/atd -f

May 21 09:28:49 centos72.huawei.com systemd[1]: Started Job spooling tools.
May 21 09:28:49 centos72.huawei.com systemd[1]: Starting Job spooling tools...

进程编号是2710

[root@centos72 ~]# ps aux  | grep  2710
root       2710  0.0  0.0  25904   936 ?        Ss   09:28   0:00 /usr/sbin/atd -f
root       2719  0.0  0.0 112704   972 pts/0    S+   09:30   0:00 grep --color=auto 2710

(三)常用选项


-V 显示版本信息:
-l: 列出指定队列中等待运行的作业;相当于atq
-d: 删除指定的作业;相当于atrm
-c: 查看具体作业任务
-f /path/from/somefile:从指定的文件中读取任务
-m:当任务被完成之后,将给用户发送邮件,即使没有标准输出
注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户

(四)at时间格式


HH:MM 02:00
在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务
HH:MM YYYY-MM-DD 02:00 2018-01-08
规定在某年某月的某一天的特殊时刻进行该项任务
HH:MM[am|pm] [Month] [Date]
04pm March 17
17:20 tomorrow
HH:MM[am|pm] + number [minutes|hours|days|weeks]
在某个时间点再加几个时间后才进行该项任务
now + 5 minutes
02pm + 3 days

三创建at计划任务广播时间

(一)前期准备

1时间同步,虚拟机的时间和宿主机的时间、网络时间要一致

2关闭防火墙

3关闭selinux

(二)创建at计划任务

按ctrl+d保存

[root@centos72 ~]# at  10:00
at> wall 10:00  clock
at> <EOT>
job 1 at Tue May 21 10:00:00 2019
[root@centos72 ~]# at -l
1    Tue May 21 10:00:00 2019 = root
[root@centos72 ~]# 
Broadcast message from root@centos72.huawei.com (Tue May 21 10:00:01 2019):

10:00 clock

在创建计划任务完成之后就会写到文件里面了

[root@centos72 ~]# at  10:10
at> wall 10:10  clock
at> <EOT>
job 2 at Tue May 21 10:10:00 2019
[root@centos72 ~]# at -l
2    Tue May 21 10:10:00 2019 a root
[root@centos72 ~]# ls  /var/spool/at  -l
total 4
-rwx------. 1 root root 2806 May 21 10:04 a00002018c52a2
drwx------. 2 root root    6 May 21 10:00 spool

执行完了任务就会把相应的文件删除了

[root@centos72 ~]# cat /var/spool/at/a00002018c52a2 
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
XDG_SESSION_ID=79; export XDG_SESSION_ID
HOSTNAME=centos72.huawei.com; export HOSTNAME
SELINUX_ROLE_REQUESTED=; export SELINUX_ROLE_REQUESTED
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
SSH_CLIENT=192.168.137.1 49197 22; export SSH_CLIENT
SELINUX_USE_CURRENT_RANGE=; export SELINUX_USE_CURRENT_RANGE
SSH_TTY=/dev/pts/0; export SSH_TTY
USER=root; export USER
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:; export LS_COLORS
MAIL=/var/spool/mail/root; export MAIL
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin; export PATH
PWD=/root; export PWD
LANG=en_US.UTF-8; export LANG
SELINUX_LEVEL_REQUESTED=; export SELINUX_LEVEL_REQUESTED
HISTCONTROL=ignoredups; export HISTCONTROL
SHLVL=1; export SHLVL
HOME=/root; export HOME
LOGNAME=root; export LOGNAME
SSH_CONNECTION=192.168.137.1 49197 192.168.137.72 22; export SSH_CONNECTION
LESSOPEN=||/usr/bin/lesspipe.sh %s; export LESSOPEN
XDG_RUNTIME_DIR=/run/user/0; export XDG_RUNTIME_DIR
cd /root || {
     echo 'Execution directory inaccessible' >&2
     exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER0a4474a2'
wall 10:10  clock

marcinDELIMITER0a4474a2

注意在计划任务里面,所有的标准输出不会在屏幕上显示,而是放到了邮件里面

如果是广播就会在所有的终端都显示

[root@centos72 ~]# 
Broadcast message from root@centos72.huawei.com (Tue May 21 10:10:00 2019):

10:10 clock

四at选项示例

(一)-l: 列出指定队列中等待运行的作业;相当于atq

定义计划任务,并且是打印标准输出的

[root@centos72 ~]# at  10:15
at> hostname
at> ls
at> pwd
at> who
at> <EOT>
job 3 at Tue May 21 10:15:00 2019

 安装邮件服务

[root@centos72 ~]# yum -y install mailx
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
file:///mnt/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /mnt/repodata/repomd.xml"
Trying other mirror.
Resolving Dependencies
--> Running transaction check
---> Package mailx.x86_64 0:12.5-19.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================
 Package              Arch                  Version                     Repository                 Size
========================================================================================================
Installing:
 mailx                x86_64                12.5-19.el7                 ali-centos                245 k

Transaction Summary
========================================================================================================
Install  1 Package

Total download size: 245 k
Installed size: 466 k
Downloading packages:
mailx-12.5-19.el7.x86_64.rpm                                                     | 245 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : mailx-12.5-19.el7.x86_64                                                             1/1 
  Verifying  : mailx-12.5-19.el7.x86_64                                                             1/1 

Installed:
  mailx.x86_64 0:12.5-19.el7                                                                            

Complete!

在邮件里面显示了计划任务的内容

[root@centos72 ~]# mail
No mail for root
[root@centos72 ~]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N  1 root                  Tue May 21 10:15  35/727   "Output from your job        3"
& 1
Message  1:
From root@centos72.huawei.com  Tue May 21 10:15:00 2019
Return-Path: <root@centos72.huawei.com>
X-Original-To: root
Delivered-To: root@centos72.huawei.com
Subject: Output from your job        3
To: root@centos72.huawei.com
Date: Tue, 21 May 2019 10:15:00 +0800 (CST)
From: root@centos72.huawei.com (root)
Status: R

centos72.huawei.com
1.txt
2.txt
3.txt
4.txt
5.txt
aaa
aa.txt
access_log
anaconda-ks.cfg
aux.txt
f1
f2
f3
f4
f5
grep
nohup.out
x.txt
/root
root     pts/0        2019-05-21 08:42 (192.168.137.1)
root     pts/1        2019-05-21 09:59 (192.168.137.1)

& 
At EOF
& 
At EOF
& 

(二)-c: 查看具体作业任务

如果脚本是在计划任务里面执行最好把标准输出关闭

删除计划任务

[root@centos72 ~]# at  10:30
at> pwd<EOT>
job 4 at Tue May 21 10:30:00 2019
[root@centos72 ~]# at-l
-bash: at-l: command not found
[root@centos72 ~]# at -l
4    Tue May 21 10:30:00 2019 a root
[root@centos72 ~]# at -c  4
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
XDG_SESSION_ID=79; export XDG_SESSION_ID
HOSTNAME=centos72.huawei.com; export HOSTNAME
SELINUX_ROLE_REQUESTED=; export SELINUX_ROLE_REQUESTED
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
SSH_CLIENT=192.168.137.1 49197 22; export SSH_CLIENT
SELINUX_USE_CURRENT_RANGE=; export SELINUX_USE_CURRENT_RANGE
SSH_TTY=/dev/pts/0; export SSH_TTY
USER=root; export USER
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:; export LS_COLORS
MAIL=/var/spool/mail/root; export MAIL
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin; export PATH
PWD=/root; export PWD
LANG=en_US.UTF-8; export LANG
SELINUX_LEVEL_REQUESTED=; export SELINUX_LEVEL_REQUESTED
HISTCONTROL=ignoredups; export HISTCONTROL
SHLVL=1; export SHLVL
HOME=/root; export HOME
LOGNAME=root; export LOGNAME
SSH_CONNECTION=192.168.137.1 49197 192.168.137.72 22; export SSH_CONNECTION
LESSOPEN=||/usr/bin/lesspipe.sh %s; export LESSOPEN
XDG_RUNTIME_DIR=/run/user/0; export XDG_RUNTIME_DIR
cd /root || {
     echo 'Execution directory inaccessible' >&2
     exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER615fc239'
pwd
marcinDELIMITER615fc239

(三)-d: 删除指定的作业;相当于atrm

文件也被删除了

[root@centos72 ~]# atrm   4
[root@centos72 ~]# at -l
[root@centos72 ~]# at -c  4
Cannot find jobid 4
[root@centos72 ~]# ls /var/spool/at 
spool
[root@centos72 ~]# ls /var/spool/at  -l
total 0
drwx------. 2 root root 6 May 21 10:15 spool
[root@centos72 ~]# 

(四)-V 显示版本信息

显示版本信息,小版本不同,没有多大区别

[root@centos72 ~]# at -V
at version 3.1.13
[root@centos65 ~]#  at -V
at version 3.1.10

使用重定向创建脚本

[root@centos65 ~]# at  11:00  <<EOF
> wall noon
> EOF
job 2 at 2019-05-21 11:00
[root@centos65 ~]# at -l
2    2019-05-21 11:00 a root
[root@centos65 ~]# at -c  4
Cannot find jobid 4
[root@centos65 ~]# at -c  2
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
HOSTNAME=centos65.jd.com; export HOSTNAME
SELINUX_ROLE_REQUESTED=; export SELINUX_ROLE_REQUESTED
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
SSH_CLIENT=192.168.137.1 56213 22; export SSH_CLIENT
SELINUX_USE_CURRENT_RANGE=; export SELINUX_USE_CURRENT_RANGE
SSH_TTY=/dev/pts/1; export SSH_TTY
USER=root; export USER
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:; export LS_COLORS
MAIL=/var/spool/mail/root; export MAIL
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin; export PATH
PWD=/root; export PWD
LANG=en_US.UTF-8; export LANG
SELINUX_LEVEL_REQUESTED=; export SELINUX_LEVEL_REQUESTED
HISTCONTROL=ignoredups; export HISTCONTROL
SHLVL=1; export SHLVL
HOME=/root; export HOME
LOGNAME=root; export LOGNAME
CVS_RSH=ssh; export CVS_RSH
SSH_CONNECTION=192.168.137.1 56213 192.168.137.65 22; export SSH_CONNECTION
LESSOPEN=||/usr/bin/lesspipe.sh %s; export LESSOPEN
G_BROKEN_FILENAMES=1; export G_BROKEN_FILENAMES
cd /root || {
     echo 'Execution directory inaccessible' >&2
     exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER6e38cb04'
wall noon

marcinDELIMITER6e38cb04

at是读取键盘输入,echo是打印标准输出

管道的作用就是把前面的标准输出作为后面的标准输入

[root@centos65 ~]# echo   "wall  at jobs"  |  at  11:00
job 3 at 2019-05-21 11:00
[root@centos65 ~]# at -l
2    2019-05-21 11:00 a root
3    2019-05-21 11:00 a root

多条命令放到计划任务里面

添加换行即可

[root@centos65 ~]# echo  -e  "wall at jobs1
wall^Ct jobs2
wall at jobs3"  | at  11:00
[root@centos65 ~]# at -l
4    2019-05-21 11:00 a root
2    2019-05-21 11:00 a root
5    2019-05-21 11:00 a root
3    2019-05-21 11:00 a root
[root@centos65 ~]# at  -c  4
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
HOSTNAME=centos65.jd.com; export HOSTNAME
SELINUX_ROLE_REQUESTED=; export SELINUX_ROLE_REQUESTED
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
SSH_CLIENT=192.168.137.1 56213 22; export SSH_CLIENT
SELINUX_USE_CURRENT_RANGE=; export SELINUX_USE_CURRENT_RANGE
SSH_TTY=/dev/pts/1; export SSH_TTY
USER=root; export USER
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:; export LS_COLORS
MAIL=/var/spool/mail/root; export MAIL
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin; export PATH
PWD=/root; export PWD
LANG=en_US.UTF-8; export LANG
SELINUX_LEVEL_REQUESTED=; export SELINUX_LEVEL_REQUESTED
HISTCONTROL=ignoredups; export HISTCONTROL
SHLVL=1; export SHLVL
HOME=/root; export HOME
LOGNAME=root; export LOGNAME
CVS_RSH=ssh; export CVS_RSH
SSH_CONNECTION=192.168.137.1 56213 192.168.137.65 22; export SSH_CONNECTION
LESSOPEN=||/usr/bin/lesspipe.sh %s; export LESSOPEN
G_BROKEN_FILENAMES=1; export G_BROKEN_FILENAMES
cd /root || {
     echo 'Execution directory inaccessible' >&2
     exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER0e859fa1'
wall at jobs1
wall  at jobs2
wall at jobs3

marcinDELIMITER0e859fa1

(五)-f /path/from/somefile:从指定的文件中读取任务

[root@centos65 ~]# cat  >  atjobs.sh
wall jobs1
wall jobs2
[root@centos65 ~]# cat  atjobs.sh
wall jobs1
wall jobs2
[root@centos65 ~]# at  11:10 <  atjobs.sh 
job 6 at 2019-05-21 11:10
[root@centos65 ~]# at -l
4    2019-05-21 11:00 a root
2    2019-05-21 11:00 a root
6    2019-05-21 11:10 a root
5    2019-05-21 11:00 a root
3    2019-05-21 11:00 a root
[root@centos65 ~]# at  -c 6
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
HOSTNAME=centos65.jd.com; export HOSTNAME
SELINUX_ROLE_REQUESTED=; export SELINUX_ROLE_REQUESTED
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
SSH_CLIENT=192.168.137.1 56213 22; export SSH_CLIENT
SELINUX_USE_CURRENT_RANGE=; export SELINUX_USE_CURRENT_RANGE
SSH_TTY=/dev/pts/1; export SSH_TTY
USER=root; export USER
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:; export LS_COLORS
MAIL=/var/spool/mail/root; export MAIL
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin; export PATH
PWD=/root; export PWD
LANG=en_US.UTF-8; export LANG
SELINUX_LEVEL_REQUESTED=; export SELINUX_LEVEL_REQUESTED
HISTCONTROL=ignoredups; export HISTCONTROL
SHLVL=1; export SHLVL
HOME=/root; export HOME
LOGNAME=root; export LOGNAME
CVS_RSH=ssh; export CVS_RSH
SSH_CONNECTION=192.168.137.1 56213 192.168.137.65 22; export SSH_CONNECTION
LESSOPEN=||/usr/bin/lesspipe.sh %s; export LESSOPEN
G_BROKEN_FILENAMES=1; export G_BROKEN_FILENAMES
cd /root || {
     echo 'Execution directory inaccessible' >&2
     exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER1bfe0e60'
wall jobs1
wall jobs2

marcinDELIMITER1bfe0e60
[root@centos65 ~]# at  11:20  -f  atjobs.sh 
job 7 at 2019-05-21 11:20
[root@centos65 ~]# at -l
4    2019-05-21 11:00 a root
7    2019-05-21 11:20 a root
2    2019-05-21 11:00 a root
6    2019-05-21 11:10 a root
5    2019-05-21 11:00 a root
3    2019-05-21 11:00 a root
[root@centos65 ~]# at -c   7
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
HOSTNAME=centos65.jd.com; export HOSTNAME
SELINUX_ROLE_REQUESTED=; export SELINUX_ROLE_REQUESTED
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
SSH_CLIENT=192.168.137.1 56213 22; export SSH_CLIENT
SELINUX_USE_CURRENT_RANGE=; export SELINUX_USE_CURRENT_RANGE
SSH_TTY=/dev/pts/1; export SSH_TTY
USER=root; export USER
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:; export LS_COLORS
MAIL=/var/spool/mail/root; export MAIL
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin; export PATH
PWD=/root; export PWD
LANG=en_US.UTF-8; export LANG
SELINUX_LEVEL_REQUESTED=; export SELINUX_LEVEL_REQUESTED
HISTCONTROL=ignoredups; export HISTCONTROL
SHLVL=1; export SHLVL
HOME=/root; export HOME
LOGNAME=root; export LOGNAME
CVS_RSH=ssh; export CVS_RSH
SSH_CONNECTION=192.168.137.1 56213 192.168.137.65 22; export SSH_CONNECTION
LESSOPEN=||/usr/bin/lesspipe.sh %s; export LESSOPEN
G_BROKEN_FILENAMES=1; export G_BROKEN_FILENAMES
cd /root || {
     echo 'Execution directory inaccessible' >&2
     exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER7d9da0c8'
wall jobs1
wall jobs2

marcinDELIMITER7d9da0c8

(六)-m:当任务被完成之后,将给用户发送邮件,即使没有标准输出

[root@centos65 ~]# at  10:50  -m
at> true<EOT>
job 8 at 2019-05-21 10:50
[root@centos65 ~]# at -l
4    2019-05-21 11:00 a root
8    2019-05-21 10:50 a root
7    2019-05-21 11:20 a root
2    2019-05-21 11:00 a root
6    2019-05-21 11:10 a root
5    2019-05-21 11:00 a root
3    2019-05-21 11:00 a root
[root@centos65 ~]# date
Tue May 21 10:45:46 CST 2019

按时发送了一封邮件

[root@centos65 ~]# mail
Heirloom Mail version 12.4 7/29/08.  Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N  1 root                  Tue May 21 10:50  13/453   "Output from your job        8"
& 1
Message  1:
From root@centos65.jd.com  Tue May 21 10:50:01 2019
Return-Path: <root@centos65.jd.com>
X-Original-To: root
Delivered-To: root@centos65.jd.com
Subject: Output from your job        8
To: root@centos65.jd.com
Date: Tue, 21 May 2019 10:50:00 +0800 (CST)
From: root@centos65.jd.com (root)
Status: R

五at时间格式示例

TIME:定义出什么时候进行 at 这项任务的时间
HH:MM [YYYY-mm-dd]
noon, midnight, teatime(4pm)
tomorrow
now+#{minutes,hours,days, OR weeks}

注意如果定义的计划任务时间超过了今天的时间,那么计划任务会在明天执行

比如现在是10点,定义的计划任务在9点那么最早就是明天的9点

[root@centos65 ~]# at  10:20
at> pwd
at> <EOT>
job 9 at 2019-05-22 10:20
[root@centos65 ~]# at -l
4    2019-05-21 11:00 a root
7    2019-05-21 11:20 a root
2    2019-05-21 11:00 a root
9    2019-05-22 10:20 a root
6    2019-05-21 11:10 a root
5    2019-05-21 11:00 a root
3    2019-05-21 11:00 a root

修改现在的时间

[root@centos65 ~]# at -l
4    2019-05-21 11:00 a root
7    2019-05-21 11:20 a root
2    2019-05-21 11:00 a root
9    2019-05-22 10:20 a root
6    2019-05-21 11:10 a root
5    2019-05-21 11:00 a root
3    2019-05-21 11:00 a root
[root@centos65 ~]# date   052210302019
Wed May 22 10:30:00 CST 2019
[root@centos65 ~]# date
Wed May 22 10:30:03 CST 2019
[root@centos65 ~]# at -l
4    2019-05-21 11:00 a root
7    2019-05-21 11:20 a root
2    2019-05-21 11:00 a root
9    2019-05-22 10:20 a root
6    2019-05-21 11:10 a root
5    2019-05-21 11:00 a root
3    2019-05-21 11:00 a root

硬件时间没变,重启之后先读取硬件时间

注意到了计划任务的时间,没有执行文件不会被删除

[root@centos65 ~]# clock
Tue 21 May 2019 10:58:15 AM CST  -0.563769 seconds

(一)从现在往后推多长时间

now+#{minutes,hours,days, OR weeks}

[root@centos72 ~]# at now+20minutes
at> pwd<EOT>
job 5 at Tue May 21 11:22:00 2019
[root@centos72 ~]# at -l
5    Tue May 21 11:22:00 2019 a root
[root@centos72 ~]# date
Tue May 21 11:03:11 CST 2019

单位可以简写,但是不能不写

[root@centos72 ~]# at now+40min
at> ls<EOT>
job 6 at Tue May 21 11:44:00 2019
[root@centos72 ~]# at -l
5    Tue May 21 11:22:00 2019 a root
6    Tue May 21 11:44:00 2019 a root

(二)/etc/at.{allow,deny}控制用户是否能执行at任务


白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能执行at命令
黑名单:/etc/at.deny 默认存在,拒绝该文件中用户执行at命令,而没有在at.deny 文件中的使用者则可执行
如果两个文件都不存在,只有 root 可以执行 at 命令

普通用户默认是可以执行计划任务的

[root@centos72 ~]# su - wang
Last login: Mon May 20 22:38:25 CST 2019 on pts/1
[wang@centos72 ~]$ at  11:10
at> wall  jobs1<EOT>
job 7 at Tue May 21 11:10:00 2019
[wang@centos72 ~]$ at -l
7    Tue May 21 11:10:00 2019 a wang
[wang@centos72 ~]$ date
Tue May 21 11:08:49 CST 2019
[wang@centos72 ~]$ pwd
/home/wang
[wang@centos72 ~]$ 
Broadcast message from wang@centos72.huawei.com (Tue May 21 11:10:00 2019):

jobs1
^C

让普通用户不能执行计划任务

[wang@centos72 ~]$ exit 
logout
[root@centos72 ~]# ll  /etc/at.deny 
-rw-r--r--. 1 root root 1 Oct 31  2018 /etc/at.deny
[root@centos72 ~]# cat  /etc/at.deny 

[root@centos72 ~]# echo  wang  >  /etc/at.deny 
[root@centos72 ~]# cat  /etc/at.deny 
wang
[root@centos72 ~]# su - wang
Last login: Tue May 21 11:08:19 CST 2019 on pts/0
[wang@centos72 ~]$ at  -l
You do not have permission to use at.
[wang@centos72 ~]$ at  11:20
You do not have permission to use at.
[wang@centos72 ~]$ pwd
/home/wang
[wang@centos72 ~]$ 

白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能执行at命令

注意如果黑名单白名单都有的用户那么白名单优先生效,但是不在白名单里面的用户就会被拒绝

如果没有白名单文件,那么在黑名单之外的其他用户会被允许

[root@centos72 ~]# cat /etc/at.allow
cat: /etc/at.allow: No such file or directory
[root@centos72 ~]# echo wang  > /etc/at.allow
[root@centos72 ~]# cat /etc/at.allow
wang
[root@centos72 ~]# ll /etc/at.allow
-rw-r--r--. 1 root root 5 May 21 11:15 /etc/at.allow
[root@centos72 ~]# su - wang
Last login: Tue May 21 11:12:27 CST 2019 on pts/0
[wang@centos72 ~]$ at  -l
[wang@centos72 ~]$ at  11:20
at> ls<EOT>
job 8 at Tue May 21 11:20:00 2019
[wang@centos72 ~]$ at  -l
8    Tue May 21 11:20:00 2019 a wang
[wang@centos72 ~]$ 

目前只有wang才可以创建计划任务

[root@centos72 ~]# cat /etc/at.allow
wang
[root@centos72 ~]# cat /etc/at.deny 
wang
[root@centos72 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
wang:x:1000:1000:wang:/home/wang:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
rooter:x:1001:1001::/home/rooter:/bin/bash
123:x:1002:1002::/home/123:/bin/bash
[root@centos72 ~]# su - rooter
[rooter@centos72 ~]$ pwd
/home/rooter
[rooter@centos72 ~]$ at -l
You do not have permission to use at.
[rooter@centos72 ~]$ at  11:20
You do not have permission to use at.
[rooter@centos72 ~]$ exit 
logout

如果两个文件都不存在,只有 root 可以执行 at 命令

[root@centos72 ~]# rm -f  /etc/at.*
[root@centos72 ~]# cat /etc/at.deny 
cat: /etc/at.deny: No such file or directory
[root@centos72 ~]# cat /etc/at.allow
cat: /etc/at.allow: No such file or directory
[root@centos72 ~]# su - wang
Last login: Tue May 21 11:15:48 CST 2019 on pts/0
[wang@centos72 ~]$ at -l
You do not have permission to use at.

at具有特殊权限

[root@centos72 ~]# which at
/usr/bin/at
[root@centos72 ~]# ll  /usr/bin/at
-rwsr-xr-x. 1 root root 53048 Oct 31  2018 /usr/bin/at

无法控制管理员

[root@centos72 ~]# echo  root  >  /etc/at.deny
[root@centos72 ~]# cat /etc/at.deny
root
[root@centos72 ~]# at -l
6    Tue May 21 11:44:00 2019 a root
[root@centos72 ~]# at  11:30
at> pwd
at> <EOT>
job 9 at Tue May 21 11:30:00 2019
[root@centos72 ~]# at -l
6    Tue May 21 11:44:00 2019 a root
9    Tue May 21 11:30:00 2019 a root

at使用的不多

一次性删除多个计划任务,直接删除文件即可

[root@centos72 ~]# at -l
6    Tue May 21 11:44:00 2019 a root
9    Tue May 21 11:30:00 2019 a root
[root@centos72 ~]# ls /var/spool/at/
a00006018c5300  spool
You have new mail in /var/spool/mail/root
[root@centos72 ~]# rm -f  /var/spool/at/a00006018c5300
[root@centos72 ~]# ls /var/spool/at/
spool
[root@centos72 ~]# at -l


作者:wang618
出处:https://www.cnblogs.com/wang618/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

原文地址:https://www.cnblogs.com/wang618/p/11267360.html