定期执行程序 at 和 crontab

目录

一 、 at命令 :仅执行一次就结束调度

1.at命令详解

        1.1参数详情

        1.2时间格式 

 2. at命令的访问控制

        2.1 白名单  /etc/at.allow (优先级略高)

       2.2 黑名单 /etc/at.deny

二 、 crontab命令 :循环执行

1.crontab命令详解 

        1.1 常用选项

        1.2  crontab计划任务的时间格式

        1.3 crontab计划任务的时间格式中的特殊符号  

2. crontab的访问控制命令 

3.系统的计划任务


一 、 at命令 :仅执行一次就结束调度

at命令是避免忘记在将来特定时间的任务或在你离开时让计算机为你运行任务的非常好的方式。

1.at命令详解

at     [ 参数 ] [ 时间 ]

atq   查看用户的at调度

atrm 取消一个at调度中的工作

        1.1参数详情

-l   列出目前系统上该用户的所有at调度,与atq作用相同

-d  取消一个在at调度中的工作, 与atrm作用相同

-m 当 at 工作完成后,无论命令是否输出,都用 E-mail 通知执行 at 命令的用户

-f   指定所要提交的脚本文件

-c 工作标识号     显示该at工作的实际内容

        1.2时间格式 

       时间和日期可以是绝对的,也可以添加一个加号 ( + ) 使它们相对于现在。在指定相对时间时,下面这些日常生活中所使用的词汇都可以使用:minutes hours days weeks months years

 HH:MM                            今天的HH时MM分

HH:MM XXXX-YY-ZZ       某年某月某日的  HH时MM分

now + 1 minutes               从现在开始一分钟

 下面举几个例子:(有警告,我们不用管他,可能是因为root用户执行命令的缘故)

[root@localhost li]# at 14:40 2023-04-09
warning: commands will be executed using /bin/sh
at> 



[root@localhost li]# at 14:45
warning: commands will be executed using /bin/sh
at> 


[root@localhost li]# at now + 1 minutes
warning: commands will be executed using /bin/sh
at> 


 2. at命令的访问控制

        2.1 白名单  /etc/at.allow (优先级略高)

      如果系统中有 /etc/at.allow 文件,那么只有写入 /etc/at.allow 文件(白名单)中的用户可以使用 at 命令,其他用户不能使用 at 命令

       2.2 黑名单 /etc/at.deny

       有 /etc/at.deny 文件,那么写入 /etc/at.deny 文件中的用户不能使用 at 命令,其他用户可以使用 at 命令。不过这个文件对 root 用户不生效。

如果系统中这两个文件都不存在,那么只有 root 用户可以使用 at 命令

二 、 crontab命令 :循环执行

crontab命令是Linux用于设置周期性被执行的指令,一般精确到分级,秒级一般用shell脚本。

1.crontab命令详解 

[root@localhost li]# crontab -help
crontab: 不适用的选项 -- h
crontab: usage error: unrecognized option
Usage:
 crontab [options] file
 crontab [options]
 crontab -n [hostname]

Options:
 -u <user>  define user
 -e         edit user's crontab
 -l         list user's crontab
 -r         delete user's crontab
 -i         prompt before deleting
 -n <host>  set host in cluster to run users' crontabs
 -c         get host in cluster to run users' crontabs
 -T <file>  test a crontab file syntax
 -s         selinux context
 -V         print version and exit
 -x <mask>  enable debugging

        1.1 常用选项

crontab -e         编辑用户crontab

crontab -l          列出用户crontab

crontab -r          删除用户crontab

crontab -i          删除前提示

crontab -n        设置主机在集群中运行用户的crontab

crontab -c        让主机在集群中运行用户的crontab

        1.2  crontab计划任务的时间格式

0-590-231-311-120-7

举个例子: 

                0  15  *  *  *                     在每天的 15:00

                0  15  *  *  1                    在每周一的15:30 

                0  15  1,15  *  *            在每月的1日15日的 15:30

                0  15  *  *  1-5                 在每周一至周五的 15:30

                */10  15  *  *  *                   在每天的15:00  每隔 十分钟

                0  0  1,15  *  1              在每月的1号,15号   周一的  零点零分

        1.3 crontab计划任务的时间格式中的特殊符号  

特殊字符含义
*任何时刻
分割时段      1,3,5,7
-一段时间   (1-7)
/数字时间间隔频率   比如 */3

注:%在crontab里面有特殊含义,如果有命令里面需要使用%,需要使用\转义。

2. crontab的访问控制命令 

       该命令和 at 命令类似,也是通过 /etc/cron.allow 和 /etc/cron.deny 文件来限制某些用户是否可以使用 crontab 命令的。而且原则也非常相似:/etc/cron.allow 文件比 /etc/cron.deny 文件的优先级高,Linux 系统中默认只有 /etc/cron.deny 文件。

        每个用户都可以使用crontab实现自己的定时命令,通过crontab [ -u user ] file  

3.系统的计划任务

        anacron 可以处理关机状态时未执行的计划任务,anacron不能指定何时执行某项任务,而是以天为单位或是在开机后立刻进入anacron的操作(/etc/anacrontab)。它会去检测停机期间应该进行但是并没有进行的crontab任务,并将该任务执行一遍,然后anacron就会自动停止了

[root@localhost li]# cat /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

      当需要同一时间执行多个脚本时,可以将这多个脚本放在一个目录下,然后使用run-parts来执行。

run-parts:该命令可将后面接的“目录”内的所有文件找出来执行。



三 、练习 

        1.指定在2023/08/26 09:00将时间写入testmail.txt文件中

[root@localhost /]# at 9:00 2023-08-26
warning: commands will be executed using /bin/sh
at> date > testmail
at> <EOT>
job 1 at Sat Aug 26 09:00:00 2023

 

[root@localhost /]# atq
1	Sat Aug 26 09:00:00 2023 a root

        

        2.指定在每天凌晨4:00将该时间点之前的系统日志信息备份到个目录下(/var/log/messages ),备份后日志文件名显示格式logfileYY-MM-DD HH-MM

($(date +%Y-%m-%d-%H-%M)是一个shell命令,用于获取当前日期和时间,并将其格式化为YYYY-MM-DD HH-MM的形式)

0 4 * * * cp /var/log/messages /var/log/messages.$(date+\%Y-\%m-\%d-\%H-\%M\)

[root@localhost /]# crontab -l
0 4 * * * cp /var/log/messages /var/log/messages.$(date+\%Y-\%m-\%d-\%H-\%M\)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值