1.at
含义
使用 at 命令可以调度任务的自动执行。at 文件只执行一次任务,然后便从目录中删除这些文件。
命令
选项 | 选项用法或含义 |
---|---|
-m | 当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出 |
-I | 列出所有的指定(atq的别名) |
-d | 删除指定(atrm的别名) |
-v | 显示任务将被执行的时间 |
-c | 打印任务的内容到标准输出 |
-V | 显示版本信息 |
-q | <列队> 使用指定的列队 |
-f | <文件> 从指定文件读入任务而不是从标准输入读入 |
-t | <时间参数> 以时间参数的形式提交要运行的任务 |
相关命令
atq:列出用户的计划任务,如果是超级用户将列出所有用户的任务,结果的输出格式为:作业号、日期、小时、队列和用户名。
atrm:根据Job number删除at任务。
batch:在系统负荷允许的情况下执行at任务,也就是在系统空闲的时候才执行at任务。
时间定义
(1)绝对计时法:
接受在当天的hh:mm(小时:分钟)式的时间指定,假如该时间已过去,那么就放在第二天执行。
接受midnight(深夜),noon(中午),teatime(4:00)等比较模糊的词语来指定时间。
接受12小时计时制,即在时间后面加上AM(上午)或PM(下午)。
接受具体日期如:month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日:月:年)。指定的日期必须跟在指定时间的后面。
(2)相对计时法:
格式为:now + count time-units ,now就是当前时间,time-units是时间单位,如minutes、hours、days、weeks。count是时间的数量,几天,几小时。
可以直接使用today、tomorrow来指定完成命令的时间。
列子
systemctl start atd //启用at任务服务
systemctl enable atd //查看当前用户的所有任务(即还没有执行的任务)
atq 或者 at -l // 查看所有用户的任务,展示出所有排定好的任务,且每个任务都有一个job ID
atrm 3或者at -d 3 //删除编号为3的任务
echo 'echo aaa > /var/han' | at now+1min //设置1分钟后执行指定命令
2.crontab
Crond服务会定期(默认每分钟检查一次)检查系统中是否有要执行的任务工作,如果有,便会根据其预先设定的定时任务规则自动执行该定时任务工作,这个crond定时任务服务就相当于我们平时早起使用的闹钟一样。
Crontab为Linux下的计划任务程序,对应的服务为crond;配置定时任务的方式有两种,对应的Cron任务配置文件也有两种:
(1)系统级别的任务,对应全局配置文件:直接通过命令编辑配置文件vi /etc/crontab,任务查看cat /etc/crontab;
(2)用户级别的任务,对应用户配置文件:通过crontab -e编辑任务,自动保存到/var/spool/cron/<user_name>文件,即以用户名命名的文件,通过crontab -l查看。推荐此方式,系统会检查任务的配置语法。
命令格式
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
文件说明
文件名 | 说明 |
---|---|
/etc/crontab | 全局任务配置列表 |
/etc/cron.allow | 允许执行的用户列表,文件存在时,只有该文件中的用户才能执行计划任务,一般不创建此文件 |
/etc/cron.deny | 不允许执行任务的用户列表,文件不存在时,出现在文件中的用户将不能执行计划任务,一般用于隔离不允许执行的用户 |
/etc/cron.d | 在此目录下增加计划任务,可以加到不同的文件以便任务的区别,效果以及文件配置等同于/etc/crontab |
/etc/crontab | 四个按周期执行的目录,用户可在此目录下自定义任务文件,执行时间由 /etc/crontab 文件中的 run-parts 决定 |
/etc/crontab文件内容如下:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# 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
# | | | | |
# * * * * * command to be executed
3.crontab标准化工作流程
1.计划任务脚本指定存放位,便于维护和定期备份
2、写定时任务前必须在前面写注释,包括以下:
添加计划任务的人,添加任务的时间,任务有效期,计划任务脚本的对象,脚本的作用, 以及其他需要提醒其他注意的事项
3.执行的脚本前加上/bin/bash或者/bin/sh,脚本必须使用完整的绝对路径
4、定时任务,需要尽避免标准输出和标准错误输出结尾加上>/dev/null2>&1
计划任务的标准输出和标准错误输出都会给root用户以邮件,很容易撑满磁盘消耗磁盘inode
5.能用命令完成的也写在脚本里
- 在指定用户下执行相关的定时任务
7.制定标准的书写规范
其他使用注意:
环境变量问题:计划任务的脚本得环境变量需要在脚本重新定义,可以手动在脚本内加载环境变量的配置文件如./etc/profile.