未来的某时间点执行一次性任务:
at [选项] TIME
-l 查看计划任务
-c # 查看任务具体内容
-d # 删除任务
-f 从文件读取任务
-m 执行完发邮件确认
执行方式:
1)交互式 2)输入重定向 3)at -f 文件
依赖于atd服务,需要启动才能实现at任务
at队列存放在/var/spool/at目录中
/etc/at.{deny,allow}控制用户是否能执行at任务
白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能执行at命令,优先级比deny高
黑名单:/etc/at.deny 默认存在,拒绝该文件中用户执行at命令,而没有在at.deny文件中的使用者则可执行
如果两个文件都不存在,只有root可以执行at命令
例子1:五分钟后重启
at now +5 minutes reboot
例子2:创建计划任务脚本
#!/bin/bash
at 18:00 <<EOF
echo abc
wall shut
EOF
系统自行选择空闲时间去执行此处指定的任务
batch
周期性任务cron
1.每个用户都有专用的cron任务文件: /var/spool/cron/USERNAME (root:/etc/crontab)
2.没有被重定向的输出会被邮寄给用户
3.根用户能够修改其他用户的任务
4.对于cron任务来讲,%有特殊用途;如果在命令中药使用%,则需要转义,将%放置于单引号中
5.计划任务历史记录 /var/log/cron
/etc/cron.{allow,deny} 用户黑/白名单
allow优先级比deny高,allow文件创建后,deny文件内容无效
黑白名单不影响现在计划任务
crontab -l 列出任务
-e 编辑任务
-r 删除所有任务
-i 同“-r”一同使用,以交互式模式移除指定任务
-u user 仅root可运行,指定用户管理cron任务
-f
@reboot 每次登陆系统后执行
@yearly 每年1月1号
@annually 每年1月1号
@monthly 每月1号
@weekly 每周日
@daily 每天0点
@hourly 每分钟
例子1::晚上9点10分运行echo命令
10 21 * * * root echo "hello" &> /dev/null root用户创建,需要指定用户名
10 21 * * * echo "hello" &> /dev/null 普通用户创建,不需要指定用户名
例子2:每10分钟检查磁盘分区利用率,大于80就报警
一、创建脚本/data/checkdisk.sh
DISKSPACE='df | grep "^/dev/sd" |sed -r "s@.*[ ]+([0-9]{1,3})%.*@\1@" | sort -nr |head -n1'
DISKINODE='df -i | grep "^/dev/sd" |sed -r "s@.*[ ]+([0-9]{1,3})%.*@\1@" | sort -nr |head -n1'
["$DISKSPACE" -gt 80 -o "$DISKINODE" -gt 80 ] && echo "disk will be full"
二、创建计划任务/etc/crontab
*/10 * * * * root /data/checkdisk.sh