任务计划

Linux 任务计划、周期性任务执行

未来的某时间点执行一次任务

at

batch :系统 自行选择空闲时间去执行此处指定的任务

周期性运行某任务

cron

[root@localhost ~]# rpm -q at                         (CentOS6中使用)
at-3.1.10-48.el6.x86_64
[root@localhost ~]# rpm -ql at
/etc/at.deny
/etc/pam.d/atd
/etc/rc.d/init.d/atd
/etc/sysconfig/atd
/usr/bin/at
/usr/bin/atq
[root@localhost ~]# runlevel
N 5
[root@localhost ~]# chkconfig --list atd 查看开机是否启动
atd     0:off   1:off   2:off   3:on    4:on 5:on 6:off
[root@localhost ~]# service atd status 查看目前启动状态
atd (pid  2131) is running...
 
[root@localhost ~]# rpm -q at                     (CentOS7中使用)
at-3.1.13-22.el7.x86_64
[root@localhost ~]# rpm -ql at
/etc/at.deny
/etc/pam.d/atd
/etc/sysconfig/atd
/usr/bin/at
/usr/bin/atq
/usr/bin/atrm
/usr/bin/batch
/usr/lib/systemd/system/atd.service
[root@localhost ~]# systemctl is-enabled atd 查看开机是否启动
enabled
[root@localhost ~]# systemctl st
start   status  stop    
[root@localhost ~]# systemctl status atd 查看目前启动状态
   atd.service - Job spooling tools
   Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2017-05-09 15:58:16 CST; 4h 15min ago

at任务

包:at

at 命令:at [option] TIME

常用 选项:

-V:显示版本信息:

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

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

-c:查看具体作业任务

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

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

注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户

[root@localhost ~]# date
Tue May  9 20:35:30 CST 2017
[root@localhost ~]# at 20:40
at> ls
at> echo uname<EOT>
job 6 at Tue May  9 20:40:00 2017
[root@localhost ~]# at -l
6   Tue May  9 20:40:00 2017 a root
[root@localhost ~]# ls /var/spool/at/
a00006017c0758  spool
[root@localhost ~]# cat /var/spool/at/a00006017c0758
${SHELL:-/bin/sh} << 'marcinDELIMITER175813cb'
ls
echo uname
marcinDELIMITER175813cb
[root@localhost ~]# mail    执行完会给当前用户发送邮件不会再屏幕显示
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 5 messages 1 new 5 unread
 U  1 user@localhost.local  Tue Mar 21 05:25 110/4760  "[abrt] initial-setup-gui: Gio.py:"
 U  2 root                Tue May  9 20:29  16/522   "Output from your job        3"
 U  3 root                Tue May  9 20:30  15/522   "Output from your job        2"
 U  4 root                Tue May  9 20:33  16/520   "Output from your job        4"
>N  5 root                Tue May  9 20:35  14/506   "Output from your job        5"

删除任务
[root@localhost ~]# date
Tue May  9 22:10:15 CST 2017
[root@localhost ~]# at 22:15
at> echo hostname<EOT>
job 8 at Tue May  9 22:15:00 2017
[root@localhost ~]# atq
8 Tue May  9 22:15:00 2017 a root
[root@localhost ~]# at -d 8
[root@localhost ~]# atq
[root@localhost ~]#
[root@localhost ~]#

如果定义的两个计划任务时间相同,会同时进行
[root@localhost ~]# date
Tue May  9 22:59:47 CST 2017
[root@localhost ~]# at 23:02
at> echo job1<EOT>
job 12 at Tue May  9 23:02:00 2017
[root@localhost ~]# at 23:02
at> echo job2<EOT>
job 13 at Tue May  9 23:02:00 2017
[root@localhost ~]# at -l
12  Tue May  9 23:02:00 2017 a root
13  Tue May  9 23:02:00 2017 a root
 
[root@localhost ~]# at -m 23:07
at> touch at.log<EOT>
job 15 at Tue May  9 23:07:00 2017
[root@localhost ~]# at -l
15 Tue May  9 23:07:00 2017 a root
[root@localhost ~]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 10 messages 8 unread
 U  8 root                Tue May  9 23:02  15/512   "Output from your job       12"
 U  9 root                Tue May  9 23:02  15/512   "Output from your job       13"
   10 root                Tue May  9 23:07  14/508   "Output from your job       15"
& 10
Message 10:
From root@localhost.localdomain  Tue May  9 23:07:00 2017
Return-Path: <root@localhost.localdomain>
X-Original-To: root
Delivered-To: root@localhost.localdomain
Subject: Output from your job       15
To: root@localhost.localdomain
Date: Tue,  9 May 2017 23:07:00 +0800 (CST)
From: root@localhost.localdomain (root)
Status: RO

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

HH:MM [YYYY-mm-dd]

noon,                         中午12:00

midnight,                    午夜00:00

teatime4pm)          下午茶16:00

tomorrow                    明天

now+#{minutes,hours,days, OR weeks} 现在起(分钟,小时,天,周)

 

at时间格式

HH:MM 02:00

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

HH:MM YYYY-MM-DD 02: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

02pm + 3 days

 

at 任务

执行方式:1.交互式 2.输入重定向 3.at -f文件

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

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

/etc/at.{allow,deny} 控制用户是否能执行at任务

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

优先级高,有此文件,deny无效,只有此文件中的用户可使用at

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

优先级低,在此文件中的用户无法使用at,不在此文件的用户可用at

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

 

周期性任务计划cron

相关的程序包:

[root@localhost ~]# runlevel                                 (CentOS6)
N 5
[root@localhost ~]# chkconfig --list crond
crond       0:off   1:off   2:on    3:on    4:on 5:on 6:off
[root@localhost ~]# service crond status
crond (pid  2116) is running...
 
[root@localhost ~]# rpm -ql cronie                         (CentOS7)
/etc/pam.d/crond
/etc/sysconfig/crond
/usr/bin/crontab
/usr/lib/systemd/system/crond.service
[root@localhost ~]# rpm -q cronie
cronie-1.4.11-14.el7_2.1.x86_64

[root@localhost ~]# systemctl status crond
   crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2017-05-09 15:58:16 CST; 7h ago

cronie:主程序包,提供crond守护进程及相关辅助工具

[root@localhost ~]# rpm -ql cronie
/usr/bin/crontab
/usr/lib/systemd/system/crond.service
/usr/sbin/crond

cronie-anacroncronie的补充程序,用于监控cronie任务执行状况,如cronie 中的任务在过去该运行的时间点未能正常运行,则anacron 会随后启动一次此任务

[root@localhost ~]# rpm -ql cronie-anacron
/etc/anacrontab
/etc/cron.hourly/0anacron
/usr/sbin/anacron
/usr/share/man/man5/anacrontab.5.gz
/usr/share/man/man8/anacron.8.gz
/var/spool/anacron
/var/spool/anacron/cron.daily
/var/spool/anacron/cron.monthly
/var/spool/anacron/cron.weekly
crontabs:包含CentOS提供系统维护任务
[root@localhost ~]# rpm -ql crontabs
/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly
/etc/crontab    (定义了系统中的计划任务)
/etc/sysconfig/run-parts
/usr/bin/run-parts
/usr/share/man/man4/crontabs.4.gz
/usr/share/man/man4/run-parts.4.gz

计划任务

确保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

[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 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  星期
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

例如:晚上9 10 分运行echo 命令;

10 21 * * * centos /bin/echo “Howdy!” (建议跟上路径)

 

系统的计划任务:

/etc/crontab

/etc/cron.d/配置文件

[root@localhost ~]# cd /etc/cron.d
[root@localhost cron.d]# ls
0hourly  pcp-pmie  pcp-pmlogger  raid-check  sysstat
[root@localhost cron.d]# cat 0hourly
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly

可将计划任务脚本放于/etc/crontab下以便于管理

/etc/cron.hourly/脚本

[root@localhost cron.hourly]# cat /etc/cron.hourly/0anacron
#!/bin/sh
# Check whether 0anacron was run today already
if test -r /var/spool/anacron/cron.daily; then
    day=`cat /var/spool/anacron/cron.daily`
fi
if [ `date +%Y%m%d` = "$day" ]; then
    exit 0;
fi
 
# Do not run jobs when on battery power
if test -x /usr/bin/on_ac_power; then
    /usr/bin/on_ac_power >/dev/null 2>&1
    if test $? -eq 1; then
    exit 0
    fi
fi

/usr/sbin/anacron -s

/etc/cron.daily/脚本

/etc/cron.weekly/脚本

/etc/cron.monthly/脚本

 

时间表示法:

(1)  特定值

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

(2) *

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

表示 “每

(3)  离散取值

#,#,#

(4)  连续取值

#-#

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

/#: #即为步长

时间格式

@reboot Run once after reboot. 启动后执行

例:

@reboot root touch /app/reboot.log

@yearly 0 0 1 1 * 一年执行一次

@annually 0 0 1 1 * 一年执行一次

@monthly 0 0 1 * * 每月几号

@weekly 0 0 * * 0 每周

@daily 0 0 * * * 每日

@hourly 0 * * * * 每时

 

示例:每3小时echowall 命令

0 */3 * * * centos /bin/echo “howdy!”;/usr/bin/wallwelcome to Magedu!

 

anacron系统

运行计算机关机时cron 不运行的任务,CentOS6 以后版本取消anacron 服务,由crond 服务管理

对笔记本电脑、台式机、工作站、偶尔要关机的服务器及其它不一直开机的系统很重要对很有用

配置文件:

/etc/anacrontab ,负责执行/etc/ cron.daily  /etc/cron.weekly  /etc/cron.monthly 中系统任务。

字段1 :如果在这些日子里没有运行这些任务……

字段2 :在重新引导后等待这么多分钟后运行它

字段3 :任务识别器,在日志文件中标识

字段4 :要执行的任务

/etc/cron.hourly/0anacron执行

当执行任务时,更新/var/spool/anacron/cron.daily文件的时间戳

 

管理临时文件

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

[root@localhost ~]# cat /etc/cron.daily/tmpwatch
#! /bin/sh
flags=-umc
/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
-x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
-X '/tmp/hsperfdata_*' -X '/tmp/.hdb*lock' -X '/tmp/.sapstartsrv*.log' \
-X '/tmp/pymp-*' 10d /tmp
/usr/sbin/tmpwatch "$flags" 30d /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
    if [ -d "$d" ]; then
/usr/sbin/tmpwatch "$flags" -f 30d "$d"
    fi
done

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

[root@localhost ~]# systemctl status systemd-tmpfiles-setup
   systemd-tmpfiles-setup.service - Create Volatile Files and Directories
   Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-setup.service; static; vendor preset: disabled)
   Active: active (exited) since Tue 2017-05-09 15:57:49 CST; 9h ago
     Docs: man:tmpfiles.d(5)
           man:systemd-tmpfiles(8)
 Main PID: 865 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/systemd-tmpfiles-setup.service
 
May 09 15:57:49 localhost.localdomain systemd[1]: Starting Create Volatile Files and Di.....
May 09 15:57:49 localhost.localdomain systemd[1]: Started Create Volatile Files and Dir...s.
Hint: Some lines were ellipsized, use -l to show in full.

配置文件:

/etc/tmpfiles.d/*.conf

/run/tmpfiles.d/*.conf

/usr/lib/tmpfiles/*.conf

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

/tmp 1777 root root 10d

/var/tmp 1777 root root 30d

命令:

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任务

如果误删除,可通过/var/log/cron恢复

控制用户执行计划任务:

/etc/cron.{allow,deny}

 

at crontab

一次性作业使用 at

重复性作业使用crontab

Create   at  time crontab -e

List   at -l   crontab -l

Details   at -c jobnum N/A

Remove   at -d jobnum crontab -r

Edit   N/A   crontab -e

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

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

 

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

(1) COMMAND > /dev/null

(2) COMMAND &> /dev/null

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

 

 

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

(0)
Linux.rookieLinux.rookie
上一篇 2017-05-13
下一篇 2017-05-13

相关推荐

  • 内部命令与外部命令——Linux基本命令(3)

    1.     内部命令与外部命令 内部命令:由shell自带的,而且通过某命令形式提供 内部命令在系统启动时就调入内存,是常驻内存的,所以执行效率高。 外部命令:在文件系统路径下有对应的可执行程序文件 外部命令是系统的软件功能,用户需要时才从硬盘中读入内存。 2.     命令类…

    2017-07-13
  • N22-妙手-第八周课程练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。     网桥:         一种网络设备,负责网络桥接,将网络的多个网段在数据链路层连接起来。     集线器: &…

    Linux干货 2016-11-07
  • 通过webGUI显示日志信息

         日志信息通常对于我们维护人员有着极为重要的意义,能够为我们提供故障排查、运维监控、历史操作记录等等很多必要的信息。为了方便此类信息的获取,我们可以搭建日志服务器,并实现webGUI显示以便更直观形象的观察收集它们。     一、拓扑图         &nbs…

    Linux干货 2015-07-15
  • 一些鲜为人知的编程事实

    我的程序员经历让我明白了一些关于软件开发的事情。下面是一些在编程中可能会让人感到诧异的事情: 一个程序员用了大约只用了10%-20%的时间来编码,而且大多数程序员,无论他的水平如何,其平均每天只有10-12行的代码最终会进入最终的软件产品中。这是因为,优秀的程序员会花费90%的时间来思考、调查、研究最佳的设计。而糟糕的程序员则会花费90%的时间来调试代码,并…

    Linux干货 2016-07-11
  • DNS的基本配置、子域授权与bind编译(第十八九天)

        DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。     DNS利用类似于树形目录的结构,将主机名的管理分配在不同层…

    Linux干货 2016-06-12
  • linux基础学习-第九天(shell基础)

    2016-08-10 授课内容: shell脚本基础: 变量 运算 bash测试(数字测试、字符测试、文件测试、组合测试) read命令 变量作用: 1、数据存储格式 2、参与的运算 3、表示的数据范围 变量类型: 1、本地变量 2、环境(全局)变量 3、特殊变量     驼峰命名变量:每个单词一个字母大写 本地变量:…

    Linux干货 2016-08-11