任务计划

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)
上一篇 2017-05-13 19:49
下一篇 2017-05-13 20:51

相关推荐

  • 第5周

    第5周 1.显示当前系统上root,fedora或user1用户的默认shell。 [root@node1 ~]# grep -E “^(root|fedora|user1)\>” /etc/passwd | cut -d: -f 7 /bin/bash /bin/bash /bin/bash [root@node1 ~]# grep “^\(root…

    Linux干货 2017-07-27
  • 马哥教育网络第20期—IO类型与IO模型

    IO类型与IO模型 IO类型 同步与异步(synchronous,asynchronous):关注消息通知机制 同步:进程发出系统调用之后,不会立即有返回信息,但是一旦有返回信息,则一定是最终结果. 异步:进程发出系统调用之后,会有立即返回结果,但不是最终的结果,当内核处理完成之后,内核通过通知机制通知进程,该系统调用已完成. 阻塞与非阻塞(blocking…

    Linux干货 2016-06-26
  • 源码编译安装dropbear

    tar -jxf dropbear-2013.58.tar.bz2 cd dropbear-2013.58 ./configure make PROGRAMS=”dropbear dbclient dropbearkey dropbearconvert scp” make PROGRAMS=”dropbear dbclie…

    Linux干货 2017-10-21
  • http协议

    ##socket套接字– 套接字,进程间通信IPC的一种实现,允许位于不同主机(或同一主机)上不同进程之间进行通信和数据交换。– socketAPI:封装了内核中所提供的socket通信相关的系统调用– socketDomain:根据其所使用的地址– AF_INET:Address Family,Ipv4&#8…

    Linux干货 2017-12-06
  • 加密与CA

    一次加密通讯流程: 1、生成数据 2、用单向加密数据生成特征码 3、用自己的私钥加密特征码放在数据后面 4、生成临时会话密钥加密特征码和数据 5、用对方的公钥加密临时密钥 2、私有CA 构建私有CA     1、生成私钥     2、自签署证书 给节点发放证书     …

    Linux干货 2017-02-13
  • linux 磁盘管理

    磁盘管理 Linux思想一切皆文件: open(),read(),write(),close() I/O 设备地址 设备类型: 块设备:block,存取单位“块”,磁盘 (随机访问) 字符设备:char,存取单位“字符”,键盘 (逻辑访问) 设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通讯。 设备编号: ll /dev/sda* root…

    Linux干货 2016-08-29