我使用的是centos7.6,at不是系统自带的命令,at下的命令只执行一次,at命令是交互式的在输入完成后使用ctrl+d结束。
#安装at
yum -y install at
#设置运行级别
chkconfig --level 35 atd on
#启动
service atd start
at 参数 时间
参数:
-m:at任务完成后用邮件通知用户,即使没有输出信息
-l:相当于atq,列出系统上该用户的所有at调度
-d:相当于atrm,取消一个在at中调度的工作
-v:使用较明显的时间格式列出at调度中的任务列表
-c:列出后面姐的该项工作的的实际命令内容
时间:
HH:MM //18:30
midnight //0点 (午夜)
noon //12点 (中午)
teatime //16点(下午4点)
AM 或 PM后缀指定一天的上午或下午。 //at 2:00 pm
MMDDYY
MM/DD/YY 或 DD.MM.YY
now + 计数 时间单位(minutes 、hours 、 days 或 weeks)
at now + 3 hours(从现在开始起三个小时后)
at 4pm + 3 days //三天以后的下午4点执行一个任务
at 2am + tomorrom //明天上午2点
at 10am Jul 31 //7月31日上午10点
案例:凌晨2点备份/etc目录 到 /tmp格式为 etc.tar.xz
at 02:00
at> tar zcvf /tmp/etc.tar.gz /etc
at>ctrl+d
#查看任务
at -l 或者 atq
#删除任务,后面的参数是任务编号
at -d 1 或者atrm 1
当/etc/at.allow存在时只允许/etc/at.allow内的用户运行at,当/etc/at.allow不存在但/etc/at.deny存在时不允许/etc/at.deny内的用户运行at,两个文件都为空代表允许所以用户执行
#白名单
/etc/at.allow
#黑名单
/etc/at.deny
这里的空闲指的是系统负载低于0.8,使用方法和at一样
系统空闲时备份etc目录
batch
at> tar zcvf /tmp/etc.tar.gz /etc
at>ctrl+d
crontab [-u username] [-l|-e|-r]
参数 | 含义 |
---|---|
-u | 只有root用户可以执行这个任务,也即帮其他用户新建、删除任务 |
-e | 编辑任务内容 |
-l | 查询任务内容 |
-r | 删除任务内容 |
crontab -e每行任务有6个参数,含义如下
代表意义 | 分钟 | 小时 | 日期 | 月份 | 周 | 命令 |
---|---|---|---|---|---|---|
数字范围 | 0-59 | 0-23 | 0-31 | 0-12 | 0-7 | 要执行的命令 |
其中周里面的0和7都代表周日,注意周与日月不可并存
特殊字符:
特殊字符 | 代表意义 |
---|---|
*(星号) | 任意时刻,如0 12 * * * sh shell-utils/show-colored-text.sh的*代表每个月的每个周中的每一天 |
,(逗号) | 代表分割时段,例如0 3,6 * * * command,表示在3点和6点时执行任务,注意不要有空格符 |
-(减号) | 代表时间段范围,例如如果要在凌晨1点到6点的30分的时候执行command命令则应该是 30 1-6 * * * command |
/n | 表示每隔n个单位间隔执行一次的意思,例如 */10 1-6 * * * command表示凌晨1到6点时间段内每隔10分钟执行一次command |
查软件是否已安装:rpm -q crontabs
查软件的文件列表:rpm -ql crontabs
查软件的配置文件列表:rpm -qc crontabs
服务状态:systemctl status crond 注:d是daemon守护进程
重启at服务: systemctl restart crond 或 service crond restart
关闭at服务: systemctl stop crond 或 service crond stop
开机不启动at服务: systemctl disable crond 或 chkconfig crond off
开机启动at服务: systemctl enable crond 或 chkconfig crond on
与at一样,当/etc/cron.allow存在时只允许/etc/cron.allow内的用户运行crontab,当/etc/cron.allow不存在但/etc/cron.deny存在时不允许/etc/cron.deny内的用户运行crontab,两个文件都为空代表允许所以用户执行
#配置
/etc/crontab
#白名单
/etc/cron.allow
#黑名单
/etc/cron.deny
#计划任务存放位置,按用户存
/var/spool/cron/
#任务执行记录
/var/log/cron
如果间隔的秒数能被60整除例如1、2、4、6、10、12等
#每10秒执行一次
* * * * * 任务
* * * * * * sleep 10; 任务
* * * * * * sleep 20; 任务
* * * * * * sleep 30; 任务
* * * * * * sleep 40; 任务
* * * * * * sleep 50; 任务
如果间隔的秒数不能被60整除例如7、8、9、11等
例如每7秒执行一次
crontab.sh
#!/bin/bash
step=7
for (( i = 0; i < 60*$step; i=(i+step) )); do
$(任务')
sleep $step
done
exit 0
crontab -e
*/7 * * * * /home/crontab.sh