linux 任务计划、周期性任务

未来的某时间点执行一次某任务:at,batch
周期性运行某任务:crontab
执行结果:通过本地邮件服务发送给用户

mailx [ -s 'sbuject 标题'] username
进入开始写邮件
使用.号结束,单独成行ctrl+d 提交也可以

mail 命令收邮件
跟上邮件编号读取邮件
q 退出

非交互式输入邮件正文
mailx -s "标题" 用户 < 要输入的内容
使用管道 cat /xxx/xxx | mail -s “标题” 用户

at:命令
默认使用邮件发送结果
ctrl+d 提交
at [option]... TIME
time :
HH:MM [YYYY-mm-dd]
noon,midnight,teatime,正午,午夜,下午茶
tomorrow
now + 数字 + 单位 minutes,hours,days。。。

-l 列出当前正在等待执行的任务
-f 从指定文件读取任务,不在使用交互输入,可以执行脚本,需要全路径
-d 删除没有执行的任务,相当于atrm 数字
-c 查看要执行的任务具体内容
-q 指明任务队列
at 队列由单个字母表示,默认为a队列

batch命令:
batch会自动在系统空闲时间执行指定任务。

周期性任务计划:cron
服务程序:不断检查那些任务该执行。

确保crond守护进程处于运行状态
systemctl status crond.service

提交任务的方式:
提交固定格式的文件,不建议直接编辑此文件,使用crontab命令

cron任务分为两类:
系统cron任务, 主要实现系统自身的维护,修改需要手动编辑/etc/crontab文件
用户cron任务, 用户自定义的任务,使用crontab命令

系统任务:
每一行定义一个周期任务,查看/etc/crontab查看格式。
时间 - 运行任务的用户身份 - 要执行的任务 使用空格分割
此处的环境变量不同于用户登录后的环境变量,建议命令使用绝对路径,或自定义PATH;
执行结果邮件发送 MAILTO指定的用户。

用户任务:
/var/spool/cron/username
用户 cron 配置格式
时间 - 要执行的任务
邮件发送至当前用户

时间表示法:

  1. 特定值:给定时间点有效取值方位内的值
    注意:day of week 和 day of month 一般不同时使用。不取值使用 * 号占位
    • 给定时间点取值的所有值,表示每 。。。。
  2. 每个指定时间使用逗号分隔多个值
  3. 连续取值使用 - 连接开始和结束
  4. */ # 自定义步长,指定的时间点不能被步长整除时,其意义将不存在。

最小时间单位为分钟,想完成秒级任务,需要借助其它机制实现。

定义任务,crontab 用法
crontab -e 编辑任务;
crontab -l 列出所有任务;
crontab -r 移除所有任务;删除var/spool/cron/username文件
crontab -i 在移除所有任务时,提示用户确认。
crontab -u root用户可为指定用户编辑用户。

结果会通过邮件发送当前用户,如果拒收邮件:

  1. COMMADND > dev/null
  2. COMMADND &> dev/null

定义COMMAND时用到%需要对其转义 放置在单引号中的不需要转义

如因故未能执行,下次开机后都要执行一次,使用anacron实现。

你可能感兴趣的:(linux 任务计划、周期性任务)