Linux|奇怪的知识|一次性任务at命令的使用

这篇具有很好参考价值的文章主要介绍了Linux|奇怪的知识|一次性任务at命令的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

at命令是Linux的一个专有命令,该命令是旧的计划任务atd服务的客户端命令(at命令是c/s形式的软件套件里的client,客户端),主要的用处就是灵活制定一个工作计划,特定时间自动完成你所设定的任务。

好了,那么可能有老铁会说,这个at命令和crontab好像功能是重叠的,为什么还要了解这个命令呢?

确实,crontab作为老牌计划任务无疑还是功能比较强大的,但,at命令比crontab更为灵活,计划任务的时间范围可能会有一个比较宽泛的设定,能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的,但十分口语化的词语来指定时间因此,会填补crontab的某些应用场景,不过at只能执行一次任务,例如,某些日志需要每天都清理,at是做不到重复的执行的,而crontab是可以执行重复性的周期性的任务的。

下面将就如何使用at命令来做一个可靠的计划任务来进行一个简单的讲解。

一,

at命令存在的形式

at命令是atd服务的客户端,atd服务是一个守护进程。

在centos7这些操作系统上,最小化安装没有at命令的,需要单独安装,安装命令为:

yum install at -y

安装完毕后,需要启动服务,命令为:

systemctl enable atd && systemctl start atd

 

atd服务的状态 

[root@centos61 ~]# systemctl status atd
● atd.service - Job spooling tools
   Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2023-05-28 11:29:17 CST; 18min ago
 Main PID: 666 (atd)
   Memory: 260.0K
   CGroup: /system.slice/atd.service
           └─666 /usr/sbin/atd -f

May 28 11:29:17 centos61 systemd[1]: Started Job spooling tools.
May 28 11:29:17 centos61 systemd[1]: Starting Job spooling tools...

二,

计划任务的三要素

其实,计划任务也是可以按照事件三要素来编写的,也就是时间,地点,事件。那么,具化在Linux系统中,无疑的,时间指的就是任务开始的时间,地点自然是本机了,事件就是任务了。

那么,相对at命令来说,时间的设定是极为丰富的,例如,相对当前时间的10分钟后,today(今天),tomorrow(明天),midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点) ,minutes(分钟)、hours(小时)、days(天)、weeks(星期)等比较模糊的 词语来指定时间,用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。

总的来说,at命令的时间设定更为接近人们的平常的时间概念,也就是说可以十分的口语化。

at命令支持的任务也是比较多的,比如,shell脚本,命令,组合命令等等

at所编排的任务执行完成后都会给自己发送一个本地邮件,例如,以root用户执行了某个任务,那么,任务完成后,root用户将会收到一个邮件,邮件存放位置通常为/var/spool/mail/root

三,

at任务示例

需要说明一下,at命令通常的运行方式是交互模式,也就是先指定时间,然后写要执行的若干条任务,最后退出。

1,

一分钟后,查看/etc/passwd文件的内容

[root@centos61 ~]# date
Sun May 28 13:25:03 CST 2023

[root@centos61 ~]# at now +1 minute
at> cat /etc/passwd
at> exit
at> quit
at> <EOT>
job 11 at Sun May 28 13:26:00 2023

等待1分钟后,查看邮件,可以看到任务确实执行了:

Subject: Output from your job       11
To: root@centos61.localdomain
Message-Id: <20230528052600.6CE9620C5D51@centos61.localdomain>
Date: Sun, 28 May 2023 13:26:00 +0800 (CST)
From: root@centos61.localdomain (root)

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:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
postgres:x:1000:1000::/home/postgres:/bin/bash
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

2,

三分钟后,在root目录下touch一个名为fuck的文件

[root@centos61 ~]# at now +3 minute
at> touch /root/fuck
at> <EOT>
job 12 at Sun May 28 13:31:00 2023
[root@centos61 ~]# atq 
12	Sun May 28 13:31:00 2023 a root

3,

明天的这个时间运行一次df命令,可以看到,该任务标号是14

[root@centos61 ~]# at tomorrow
at> df
at> <EOT>
job 14 at Mon May 29 13:38:00 2023
[root@centos61 ~]# atq
14	Mon May 29 13:38:00 2023 a root

查看14号任务(具体任务在最后面,前面都是环境变量什么的,没什么可看的):

[root@centos61 ~]# at -c 14
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
XDG_SESSION_ID=1; export XDG_SESSION_ID
HOSTNAME=centos61; export HOSTNAME
SELINUX_ROLE_REQUESTED=; export SELINUX_ROLE_REQUESTED
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
SSH_CLIENT=192.168.123.1\ 49853\ 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:/opt/pgsql/bin:/opt/pgsql/data:/root/bin; export PATH
PWD=/root; export PWD
LANG=en_US.UTF-8; export LANG
SELINUX_LEVEL_REQUESTED=; export SELINUX_LEVEL_REQUESTED
PGHOME=/opt/pgsql; export PGHOME
HISTCONTROL=ignoredups; export HISTCONTROL
SHLVL=1; export SHLVL
HOME=/root; export HOME
LOGNAME=root; export LOGNAME
SSH_CONNECTION=192.168.123.1\ 49853\ 192.168.123.61\ 22; export SSH_CONNECTION
PGDATA=/opt/pgsql/data; export PGDATA
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} << 'marcinDELIMITER5f46f2f8'
df

marcinDELIMITER5f46f2f8

4,

指定当天的某个时间执行一次  ls /opt/

[root@centos61 ~]# at 14:51
at> ls /opt  
at> <EOT>
job 16 at Sun May 28 14:51:00 2023

5,

指定一个具体时间,执行任务:

很显然,现在是2023 ,2020年是不可接受的时间

[root@centos61 ~]# at 19:19 2020-05-13
at: refusing to create job destined in the past

未来的时间是可以接受的:

[root@centos61 ~]# at 19:19 2023-05-31
at> <EOT>
job 17 at Wed May 31 19:19:00 2023

6,

午夜任务(这里的午夜是指的零点了,今天是星期天,任务的开始时间是星期一7)

[root@centos61 ~]# at midnight
at> ls /opt
at> <EOT>
job 18 at Mon May 29 00:00:00 2023

7,

星期任务(星期三,当前时间执行的任务)

root@centos61 ~]# at Wednesday
at> <EOT>
job 19 at Wed May 31 14:59:00 2023
[root@centos61 ~]# date
Sun May 28 14:59:54 CST 2023

8,

明天下午两点33分的任务:

[root@centos61 ~]# at 02:33PM tomorrow
at> <EOT>
job 20 at Mon May 29 14:33:00 2023

9,

一分钟后执行启动postgresql的脚本:

[root@centos61 ~]# at -f start-pg.sh now +1 minute
job 22 at Sun May 28 16:03:00 2023

查看是否执行了脚本(多说一句,脚本不需要执行权限,因为at命令调用的就是 /bin/sh):文章来源地址https://www.toymoban.com/news/detail-462409.html

[root@centos61 ~]# ls -l start-pg.sh 
-rw-r--r--. 1 root root 52 May 20 17:34 start-pg.sh

[root@centos61 ~]# tail  /var/spool/mail/root 

waiting for server to start....2023-05-28 16:03:00.791 CST [21108] LOG:  starting PostgreSQL 12.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16), 64-bit
2023-05-28 16:03:00.795 CST [21108] LOG:  listening on IPv4 address "0.0.0.0", port 35432
2023-05-28 16:03:00.795 CST [21108] LOG:  listening on IPv6 address "::", port 35432
2023-05-28 16:03:00.805 CST [21108] LOG:  listening on Unix socket "/tmp/.s.PGSQL.35432"
2023-05-28 16:03:00.863 CST [21109] LOG:  database system was shut down at 2023-05-28 00:00:17 CST
2023-05-28 16:03:00.890 CST [21108] LOG:  database system is ready to accept connections
 done
server started

到了这里,关于Linux|奇怪的知识|一次性任务at命令的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《一次性分割一切》阅读笔记

    目录 0 体验 1 摘要 2 十个问题 参考文献 体验地址 :SEEM - a Hugging Face Space by xdecoder 体验结果 : 将哈士奇和汽车人从图片中分割出来。 尽管对于交互式人工智能系统的需求不断增长,但在视觉理解(例如分割)中的人工智能交互方面,很少有全面的研究。本文受到基于提示的

    2024年02月01日
    浏览(50)
  • 公众号一次性订阅消息

    洛塔服务号回复007获取代码。 之前发布通知,要用订阅通知替代一次性订阅消息,不知道是被骂的太惨还是技术原因,一次性订阅消息还是一直能用。 和模板消息不同的是,一次性订阅消息无需用户关注公众号,但是必须用户点击同意发送才能接收消息。 模板消息:需要关

    2024年02月09日
    浏览(49)
  • 一次性打包学透 Spring

    不知从何时开始,Spring 这个词开始频繁地出现在 Java 服务端开发者的日常工作中,很多 Java 开发者从工作的第一天开始就在使用 Spring Framework,甚至有人调侃“不会 Spring 都不好意思自称是个 Java 开发者”。 之所以出现这种局面,源于 Spring 是一个极为优秀的一站式集成框架

    2023年04月19日
    浏览(41)
  • Python:一次性输出多个量

    有的时候我们在输入一个字符串时,需要在中间加一个int类型变量时,如果一段一段输出就要写三个print,非常麻烦。今天bug君就给大家讲讲如何在Python里一次性输出多个量。 粽所粥汁,在Python里输出需要写 print(\\\"输出内容\\\") ,而输出一个变量则需要写 print(变量名) 。 注意:

    2024年02月04日
    浏览(91)
  • charles证书安装,一次性说明白

    windows上安装好charles后,需要给软件安装证书。 1、点击help - SSL proxying,选择第二个install Charles Root Certificate证书安装   2、如果以前安装过证书,但是过期了(有效期一般1年),证书界面会显示过期字样,此时就要先点击一下Reset Charles Root Certificate,然后再点击第一步中的

    2024年02月05日
    浏览(84)
  • 如何一次性启动多个SpringBoot项目

    在做微服务这块的架构设计的时候,当微服务数量越来越多的时候,本地启动各个服务的时候,可能得手动启动每个启动类。这样就很麻烦,因此记录一下如何在 idea 里面一键启动所有的项目。 比如我项目里面有5个微服务:那么就对应了5个启动类。 1.项目右上角编辑: 2.点

    2024年02月16日
    浏览(35)
  • uniapp上传图片、一次性上传多张图片

    uniapp官方文档 上传多张图片 上传单张

    2024年02月12日
    浏览(48)
  • Git仓库实现:一次性提交多个文件

    首先是建立服务器与仓库的连接,不会操作的小伙伴可以看这一篇文章,链接: Git仓库 保姆级教程 选择文件夹,使用git clone上传的仓库,点击进去 输入命令行: git commit -m \\\" \\\" ,双引号一般填入描述或者版本信息,但是若要提交多个文件,则写入 \\\"add more files\\\" 有问题欢迎随时

    2024年02月12日
    浏览(45)
  • 一次性搞懂什么是AIGC!

    你知道什么是AIGC吗?不知道?没关系,我来告诉你。AIGC就是人工智能生成内容(Artificial Intelligence Generative Content),也就是让AI自己动手创作各种各样的内容,比如图片、视频、音乐、文字等等。听起来很酷吧?那么,AIGC是怎么做到的呢?下面,我就用最简单的语言,给你

    2024年02月06日
    浏览(55)
  • Kafka核心原理之精准一次性投递

    在Kafka中,精准一次性投递(Exactly Once)=至少投递一次(At Least Once)+幂等性。 至少投递一次(At Least Once):将生产端参数acks设置为-1(all),可以保证生产端发送到Broker的消息不会丢失,即:至少投递一次(At Least Once)。 幂等性: 幂等生产者幂保证单分区单会话内精准一

    2024年04月25日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包