例行性工作命令-at,crontab

1. 系统延迟命令at

1-1. at的简单理解

  • at命令必须在atd服务开启的情况下执行,rhel7默认atd服务为开启状态;
  • at命令必须指定任务运行的时间,但执行一次且不能精确到秒。
  • at命令执行后可以安全注销 ,因为该任务会在与 shell会话断开连接的情况下运行;

1-2. at运作方式

使用 at 这个命令来产生所要执行的任务,并将这个任务以文本文件的方式写入 /var/spool/at/目录内,该任务便能等待 atd 这个服务的取用与执行了。

1-3. at的管理

  • at命令用法
    at 11:03 若该时间点未超过,今天执行任务;若超过,明天执行
    at now+2min 该时间点再过2min执行,min还可以替换成hours,days,weeks
    at 4pm +3 days 三天后的下午4点执行任务
    at 10am Jul 31 7月31号早上10点执行任务
    at 1am tomorrow 明天早上1点执行任务
    at midnight 00:00执行


  • at的参数详解:
    -m 当 at任务完成后,即使没有输出讯息,也以邮件方式通知已完成
    -l 同atq命令,显示该用户所有的at任务
    -d 同atrm命令,取消某个at任务
    -v 使用较明显的时间格式
    -c 可以列出后面任务的实际命令内容


  • 时间格式列举:具体信息请查看man at

    • HH:MM
    • MMDD[CC]YY, MM/DD/[CC]YY, DD.MM.[CC]YY or [CC]YY-MM-DD
    • minutes, hours, days, or weeks
    • midnight(00:00), noon(12:12),or teatime(16:00)
    • pm,am

注意:at命令行后,按Enter继续键入任务命令(可由多个命令组成),按 Ctrl+d完成计划任务,文件名用绝对路径。

[root@at-host ~]# at now+2min
at> touch /mnt/fle{1..10}
at> <EOT>
job 10 at Tue Oct 11 11:34:00 2016

[root@at-host ~]# at -v 11:18
Wed Oct 12 11:18:00 2016
at> echo hello
at> <EOT>
job 26 at Wed Oct 12 11:18:00 2016

[root@at-host ~]# at -c 26
#!/bin/sh       <==通过bash shell执行
# atrun uid=0 gid=0
# mail kiosk 0
......省略部分输出
cd /root || {       <==可以看出,会到下达at时的家目录去执行
     echo 'Execution directory inaccessible' >&2
     exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER090e6f4a'
echo hello      <==真正的任务命令

marcinDELIMITER090e6f4a

1-4. at命令使用者的设定

  • vim /etc/at.deny
    用户黑名单,默认存在于系统中,在此列表中出现的用户被禁止


  • vim /etc/at.allow
    用户白名单,默认不存在于系统中,但当此文件存在时,deny文件失效;所有普通用户执行at的权利被禁止,只有在此列表中出现的用户允许执行at命令

2. 管理定期任务

2-1. crontab运作方式

使用 acrontab 这个命令来产生所要执行的任务,并将这个任务以文本文件的方式写入 /var/spool/cron/目录内,该任务便能等待crond 这个服务的取用与执行了。

2-2. crontab命令

-u      仅root可使用该参数,指定用户,实现对其他用户工作任务的增删改
-l      查看crontab的任务内容
-r      移除所有的crontab任务内容
-e      编辑crontab任务内容

2-3. crontab编辑格式

  • 格式:分钟 小时 日期 月 星期 命令

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
| | | | |
* * * * * command to be executed


  • 特殊符号用法:
    * 代表任何时刻都接受
    , 或者(1,2代表或者2)
    - 从什么到什么(1-5代表从1到5)
    n/ 每隔n单位间隔

  • 实例练习


    05 * * * * 每小时整点过5分钟
    05 02 * * * 每天02:05am
    30 08 01 * * 每月的第一天8:30pm
    /5 * * * 每5分钟
    /10 9-17 1,15 * 每月的第一天和第15天9:00am-17:00pm每隔10分钟运行
    0 0 1 jan 0 1月1日午夜和1月的每个星期天(注意:周与日月一般不同时并存)

  • crontab编辑注意事项
    - 周与日月不可同时并存
    - 0和7均可代表星期天
  • 2-4. crontab命令使用者的设定

    在系统中默认所有用户可以设定 cron

    • 用户黑名单/etc/cron.deny 默认存在于系统中,在此列表中出现的用户被禁止


    • 用户白名单/etc/cron.allow 默认不存在于系统中,但当此文件存在时,deny文件失效;所有普通用户执行crontab的权利被禁止,只有在此列表中出现的用户允许执行

    2-5. crontab的系统配置文件

    这个crontab -e是针对使用者的cron来设计的,如果是系统的定时任务时, 该怎么办呢?是否还是需要以 crontab -e来管理呢?

    cat /etc/crontab
     1 SHELL=/bin/bash              <==使用哪种 shell 接口
     2 PATH=/sbin:/bin:/usr/sbin:/usr/bin       <==执行文件搜寻路径
     3 MAILTO=root                  <==若有额外 STDOUT,以 email 将数据发送给谁
     4 # *  *  *  *  * user-name  command to be executed
    

    3. 系统临时文件

    使系统中正在运行的临时文件不会被清理掉

    [root@cron-host ~]# vim /usr/lib/tmpfiles.d/westos.conf        
    类型 名称 权限 所有人 所有组 存在时间(s,m,d)
    systemd-tmpfiles --create  /usr/lib/tmpfiles.d/westos.conf  ##创建
    systemd-tmpfiles --clean   /usr/lib/tmpfiles.d/westos.conf  ##清理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,cron-utils可以用来验证crontab表达式的有效。通过使用cron-utils,您可以解析和验证一个crontab表达式的每个部分,包括分钟、小时、日期、月份和星期几。如果表达式无效,cron-utils将返回一个错误消息,告诉您表达式的哪个部分是无效的。 下面是一个使用cron-utils验证crontab表达式有效的示例代码: ```java import com.cronutils.descriptor.CronDescriptor; import com.cronutils.model.Cron; import com.cronutils.model.definition.CronDefinitionBuilder; import com.cronutils.parser.CronParser; import com.cronutils.validator.CronValidator; public class CronUtilsExample { public static void main(String[] args) { String crontabExpression = "0 0 * * * ?"; // an example crontab expression CronParser parser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ)); Cron cron = parser.parse(crontabExpression); CronValidator validator = CronValidator.instance(); validator.validate(cron); CronDescriptor descriptor = CronDescriptor.instance(); String description = descriptor.describe(cron); System.out.println(description); } } ``` 在上面的代码中,我们首先使用CronParser解析了一个crontab表达式,然后使用CronValidator验证了这个表达式的有效。最后,我们使用CronDescriptor生成了一个可读的描述,以便了解这个表达式的含义。如果表达式无效,CronValidator将会抛出异常,告诉您表达式的哪个部分是无效的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值