Linux计划任务

计划任务

Linux任务计划、周期性任务执行
• 未来的某时间点执行一次任务:
    at
    batch:系统自行选择空闲时间去执行此处指定的任务
• 周期性运行某任务: 
    cron

at任务

at命令:at [option] TIME

常用选项:

  • -V 显示版本信息:

  • -l: 列出指定队列中等待运行的作业;相当于atq

  • -d: 删除指定的作业;相当于atrm

  • -c: 查看具体作业任务

  • -f /path/from/somefile:从指定的文件中读取任务

  • -m:当任务被完成之后,将给用户发送邮件,即使没有标准输出

注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户这样长此以往垃圾邮件就会塞满你的硬盘。
Linux计划任务

TIME:定义出什么时候进行 at 这项任务的时间

HH:MM [YYYY-mm-dd]
noon, midnight, teatime(4pm)
tomorrow
now + # {minutes,hours,days, OR weeks}

at 9:00 2016-10-10

查看任务 :atq

后台计划任务一定不要有标准输出 某些命令的(-v选项)

只要不涉及标准输出就不会发邮件到邮箱!

HH:MM 02:00

在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务

HH:MM YYYY-MM-DD 04:00 2016-09-20

规定在某年某月的某一天的特殊时刻进行该项任务

HH:MM[am|pm] [Month] [Date]

04pm March 17
17:20 tomorrow

HH:MM[am|pm] + number [minutes|hours|days|weeks]

在某个时间点再加几个时间后才进行该项任务
now + 5 minutes
04pm + 3 days

执行方式:

1)交互式 2)输入重定向 3)at –f 文件

依赖与atd服务,需要启动才能实现at任务

at队列存放在/var/spool/at目录中

at对用户的限制

通过/etc/at.{allow,deny}控制用户是否能执行at任务 文件中写上 用户名 就行了

1.白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能执行at命令

2.黑名单:/etc/at.deny 拒绝该文件中用户执行 at命令,而没有在at.deny 文件中的使用者则可执行

3.如果两个文件都不存在,只有 root 可以执行 at 命令

4.白名单优先级高

创建数据mandb

期性任务计划cron

相关的程序包:

cronie: 主程序包,提供crond守护进程及相关辅助工具
cronie-anacron:cronie的补充程序;用于监控cronie任务执行状况;如cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务
crontabs:包含CentOS提供系统维护任务

确保crond守护处于运行状态:

CentOS 7:
systemctl status crond
CentOS 6:
service crond status

计划周期性执行的任务提交给crond,到指定时间会自动运行系统cron任务:系统维护作业

/etc/crontab
用户cron任务:

crontab命令

日志:/var/log/cron

计划任务
系统cron任务:/etc/crontab
注释行以 #  开头
详情参见 man 5  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
# | | | | |
# * * * * * user-name command to be executed

注意:
(1)每行定义一个周期性任务  共7个字段

   * * * * * :定义周期性时间
   user-name :运行任务的用户身份
   command to be executed :要执行的任务

(2)此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量
(3)执行结果邮件发送给MAIL TO 指定用户

例如:

晚上9点10分运行echo命令;
10 21 * * * centos /bin/echo "Howdy!"

9  8,20  *  * 3,7
表示每周三和周日的8点和12点的9分执行

时间表示法:
(1) 特定值;

    给定时间点有效取值范围内的值

(2)

    * 给定时间点上有效取值范围内的所有值

表示“每…”
(3) 离散取值:

#,#,#

(4) 连续取值:

-#-#

(5) 在指定时间范围上,定义步长:

    /#: #即为步长

例如:每3小时echo命令;

    0 */3 * * * centos /bin/echo "howdy!"
时间格式
 @reboot Run once after reboot.
 @yearly 0 0 1 1 *
 @annually 0 0 1 1 *
 @monthly 0 0 1 * *
 @weekly 0 0 * * 0
 @daily 0 0 * * *
 @hourly 0 * * * *

• 系统的计划任务:
/etc/crontab
/etc/cron.d/  配置文件
/etc/cron.hourly/  脚本
/etc/cron.daily/ 脚本
/etc/cron.weekly/ 脚本
/etc/cron.monthly/ 脚本

anacron系统

 运行计算机关机时cron不运行的任务,CentOS6以后版本取消
anacron服务,由crond服务管理。
 假设计算机没有一直开机
 对笔记本电脑、台式机、工作站及其它不一直开机的系统很重要
对偶尔要关机的服务器很有用

配置文件:/etc/anacrontab,负责执行/etc/ cron.daily

/etc/cron.weekly /etc/cron.monthly中系统任务。
/etc/cron.hourly/由/cron.d/0hourly执行
• 字段1:如果在这些日子里没有运行这些任务……
• 字段2:在重新引导后等待这么多分钟后运行它
• 字段3:任务识别器,在日志文件中标识
• 字段4:要执行的任务
• 当执行任务时,更新/var/spool/anacron/中文件的时间戳

CentOS6使用/etc/cron.daily/tmpwatch定时清除临时文件

CentOS7使用systemd-tmpfiles-setup服务实现

配置文件:

  • /etc/tmpfiles.d/*.conf

    • d /tmp 1777 root root 10d

    • d /var/tmp 1777 root root 30d

  • /run/tmpfiles.d/*.conf

  • /usr/lib/tmpfiles/*.conf

  • /usr/lib/tmpfiles.d/tmp.conf

命令:

systemd-tmpfiles –clean|remove|create configfile

用户cron:

crontab命令定义,每个用户都有专用的cron任务文件:
/var/spool/cron/USERNAME

crontab命令:

crontab [-u user] [-l | -r | -e] [-i]

  • -l: 列出所有任务;

  • -e: 编辑任务;

  • -r: 移除所有任务;

  • -i:同-r一同使用,以交互式模式移除指定任务

  • -u user: 仅root可运行,指定用户管理cron任务

    控制用户执行计划任务:

    /etc/cron.{allow,deny}

at和crontab

一次性作业使用 at

重复性作业使用crontab

没有被重定向的输出会被邮寄给用户

根用户能够修改其它用户的作业

注意:运行结果的标准输出和错误以邮件通知给相关用户

(1) COMMAND > /dev/null 
(2) COMMAND &> /dev/null

对于cron任务来讲,%有特殊用途;如果在命令中要使用%,则需要转义;不过,如果把%放置于单引号中,也可以不用转义

 (1) 如何在秒级别运行任务?
    * * * * * for min in 0 1 2; do echo "hi"; sleep 20; 

 sleep命令:
sleep NUMBER[SUFFIX]...
    SUFFIX: 
    s: 秒, 默认
    m: 分
    h: 小时
    d: 天
usleep 微妙级sleep

练习:

1、每4小时执行一次对/etc目录的备份,备份至/backup目录中,保存的目录名为形如etc-201504020202

# mkdir /backup

27 */4 * * * /bin/cp -a /etc/ /backup/etc-$(date +'%Y%m%d%H%M') > /dev/null

2、每周2,4,6备份/var/log/messages文件至/backup/messages_logs/目录中,保存的文件名形如messages-20150402

# mkdir /backup/messages_logs/

20 1 * * 2,4,6 /bin/cp /var/log/messages /backup/messages_logs/messages-$(date  +'%Y%m%d') > /dev/null

3、每天每两小时取当前系统/proc/meminfo文件中的所有以S开头的信息至/stats/memory.txt文件中

# mkdir /stats
21 */2 * * * /bin/grep "^S" /proc/meminfo >> /stats/memory.txt

4、工作日的工作时间内,每两小时执行一次echo “howdy”

5 9-17/2 * * 1-5 /bin/echo "howdy"

原创文章,作者:qzx,如若转载,请注明出处:http://www.178linux.com/45221

(0)
qzxqzx
上一篇 2016-09-10 20:24
下一篇 2016-09-10 20:35

相关推荐

  • 马哥教育网络班21期+第3周课程练习

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 # who | cut -d' ' -f1 | uniiq 2、取出最后登录到当前系统的用户的相关信息。 # id $(who | …

    Linux干货 2016-07-12
  • Linux基础知识(二)

     本文的主要内容是:  1.Linux上的基本文件管理命令  2bash的特性及其命令状态返回值  3.bash的花括号展开机制  4.文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息  5如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?  &nb…

    Linux干货 2016-09-25
  • 马哥教育网络班20期+第六周课程练习

    请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;     cp /etc/rc.d/rc.sysinit  /tmp   &n…

    Linux干货 2016-10-19
  • linux目录基础、简单的命令以及运用linux帮助

    计算机组成及其功能     计算机其实是:接收用户输入指令与数据,经过中央处理器的数据与逻辑单元运算处理后,以产生或存储成有用的信息。所以计算机组成可以分为输入单元、输出单元、CPU(控制单元、算术逻辑单元)、内存     输入单元:包括键盘、鼠标、扫描仪、手写板、触摸屏等;实现…

    Linux干货 2016-09-17
  • ansible

    运维工具介绍 Ansible Ansible优点:  Agentless       (去中心化)  Stupied Simple (上手简单,学习曲线平滑)  SSH by default (安全,无需安装客户端)  YAML no code,定制剧本 (语法简单,维护方便) 自动工具衍…

    Linux干货 2017-05-23
  • shell基础if与case

    1.read   使用read来把输入值分配给一个或多个shell变量;   -p 指定要显示的提示;例如 read -p "SHURU" num   -t TIMEOUT   read 从标准输入中读取值,给每个单词分配一个变量,所有剩余单词都被分配给最后一个变量 2.流程控制   过程…

    Linux干货 2016-08-18