Linux之服务管理

1、计划任务linux

1) Crontab简介shell

一、Crontab是一个用于设置周期性被执行任务的工具;apache

二、被周期性执行的任务咱们称为Cron Job;vim

三、周期性执行的任务列表咱们称为Cron Table。windows

2) Crontab实践centos

一、 相关工具缓存

#Putty安全

#一个免费的易用的SSH链接工具bash

#http://www.putty.org/服务器

二、 安装并检查Crontab服务

①检查cron服务

检查Crontab工具是否安装:crontab -l

检查crond服务是否启动:service crond status

②安装cron(centos7以上已默认安装)

yum install vixie-cron

yum install crontabs

③案例实现

#每分钟都打印当前时间到一个日志文件中

*/1 * * * * date >> /tmp/log.txt

三、 Crontab的基本组成

crond 系统服务 + 配置文件 + 配置工具crontab

 

四、 Crontab的配置文件格式

 

 

 

案例:

①每晚的21:30重启apache

30 21 * * * service httpd restart

 

②每个月一、十、22日的4:45重启apache

45 4 1,10,22 * * service httpd restart

 

③每个月1到10日的4:45重启apache

45 4 1-10 * * service httpd restart

 

④每隔两分钟重启Apache服务器

*/2 * * * * service httpd restart     #偶数分钟

1-59/2 * * * * service httpd restart  #基数分钟

 

⑤晚上11点到早上7点之间,每隔一小时重启apache

0 23-7/1 * * * service httpd restart

 

⑥天天18:00至23:00之间每隔30分钟重启apache

0,30 18-23 * * * service httpd restart

0-59/30 18-23 * * * service httpd restart

 

总结:

* 表示任什么时候候都匹配

能够用“A,B,C” 表示A或者B或者C时执行命令 

能够用“A-B” 表示A到B之间时执行命令

能够用“*/A” 表示每A分钟(小时等)执行一次命令

五、 Crontab工具的使用

#查看某用户的计划任务列表

crontab -l -u 用户名

#修改某用户的计划任务

crontab -e -u 用户名

#查看生成的最终计划任务文件

/var/spool/cron

六、 Crontab的日志

/var/log/cron文件保存着全部cron的任务执行记录

/var/spool/mail/ 下也会以邮件的方式发送日志信息

七、 Crontab配置文件

①    全局(系统)配置文件

/etc/crontab

[root@localhost etc]# cat crontab

SHELL=/bin/bash(用该命令去执行)

PATH=/sbin:/bin:/usr/sbin:/usr/bin(载入时须要用的PATH)

MAILTO=root(执行记录邮件对象)

HOME=/(执行计划任务的根目录)

 

# 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

注:也可在/etc/crontab文件下添加计划任务,跟crontab -e不一样的是其实是一个全局的配置文件设置的计划任务,也称为系统计划任务。

②    服务配置文件

/etc/cron.d/

[root@localhost etc]# cat sysstat

#sysstat中的内容跟crontab -l所执行的内容是一致的

#crontab在载入文件的时候会把cron.d下面的配置文件信息(sysstat)载入成root用户下面的计划任务,若是用crontab –e会破坏原始文件(即sysstat)的配置内容。若是直接编辑sysstat文件的话,须要执行crontab +文件名,此时将会覆盖原先crontab -e里的内容。

③    执行crontab -e其实是修改/var/spool/cron/下面对应当前帐号的文件。执行(crontab +文件名)时,将直接读取文件中的数据覆盖到/var/spool/cron/所对应用户的配置文件中

④    在/etc/cron.d文件夹下面的文件能够认为是对系统配置的补充文件,打开能够看到和/var/spool/cron/用户的配置文件同样,可是多了个用户字段这些是系统的cron运行时自动加载的配置文件,使用crontab -l只能查看存在于/var/spool/cron/用户的cron任务

3) Crontab的常见错误

一、 环境变量

二、 命令行双引号中使用%时,未加反斜线\

三、 第三和第五个域之间执行的是“或”操做

四、 分钟设置误用

2、服务管理

1) 简介与分类

一、 系统的运行级别

①    运行级别

运行级别

含义

0

关机

1

单用户模式,能够想象为windows的安全模式,主要用于系统修复

2

不彻底的命令行模式,不含NFS服务

3

彻底的命令行模式,就是标准字符界面

4

系统保留

5

图形模式

6

重启动

②    运行级别命令

[root@localhost ~]# runlevel

N 3

(N表明no,由于一开机就进入字符界面,没有从哪一个级别转入到3级别)

#查看运行级别命令

[root@localhost ~]# init 运行级别

#修改运行级别命令

③    系统默认运行级别

[root@localhost ~]# vim /etc/inittab

id:3:initdefault:

#系统开机后直接进入哪一个运行级别

二、 服务的分类

 

#独立的服务须要占用系统内存

#xinetd服务属于超级守护进程,自己是独立的,管理一些后台程序,用户须要访问后台程序要先访问xinetd,再经过它去访问对应的后台程序,响应时间慢,但除了xinetd自己占内存,剩下的都不占用系统内存

①    查询已安装的服务

  • RPM包安装的服务

[root@localhost ~]# chkconfig --list

#查看服务自启动状态,能够看到全部RPM包安装的服务(独立服务)

  • 源码包安装的服务

#查看服务安装位置,通常是/usr/local/下

②    查看xinetd服务

须要安装xinetd服务自己

[root@localhost ~]# yum -y install xinetd

③    启动与自启动

服务启动:就是在当前系统中让服务运行,并提供功能。

服务自启动:自启动是指让服务在系统开机或重启动以后,随着系统的启动而自启动服务

④    RPM安装服务和源码包安装服务的区别

RPM安装服务和源码包安装服务的区别就是安装位置的不一样:

#源码包安装在指定位置,通常是/usr/local/

#RPM包安装在默认位置中

三、 服务与端口

①    端口的定义

若是把IP地址比做一间房子,端口就是出入这间房子的门。真正的房子只有几个门,可是一个IP地址的端口能够有65536个。如图:

 

②    端口与服务的对应

#1万之内的端口是系统预留的,超出的是用户使用的

#[root@localhost ~]# cat /etc/services(查看常规端口)

③    查询系统中开启的服务

[root@localhost ~]# netstat -tlunp

-t列出tcp数据

-u列出udp数据

-l列出正在监听的网络服务(不包含已经链接的网络服务)

-n用端口号来显示服务,而不是用服务名

-p 列出该服务的进程ID(PID)

#列出系统中全部的已经启动的服务

总结:查看服务自启动状态:chkconfig –list

          查看服务启动状态:a、[root@localhost ~]# ps aux

                                        b、[root@localhost ~]# netstat -tlunp

2) RPM包服务管理

一、 独立服务的管理

①    RPM包安装服务的位置

RPM安装服务和源码包安装服务的区别就是安装位置的不一样:

#源码包安装在指定位置,通常是/usr/local/。

其中usr是Unix System Resource,即Unix系统资源的缩写

#RPM包安装在默认位置中(不是绝对的),以下:

/etc/init.d/:启动脚本位置

/etc/sysconfig/:初始化环境配置文件位置

/etc/:配置文件位置

/etc/xinetd/conf:xinted配置文件

/etc/xindtd.d/:基于xinetd服务的启动脚本

/var/lib/:服务产生的数据放在这里

/var/log/:日志

②    独立服务的启动

[root@localhost ~]# /etc/init.d/独立服务名

start|stop|status|restart

 

[root@localhost ~]# /etc/rc.d/init.d/独立服务名

start|stop|status|restart

#redhat7.2系统早版本时,全部常规服务在此目录,照顾管理员的习惯/etc/init.d是/etc/rc.d/init.d的软连接即快捷方式。

 

[root@localhost ~]# service 独立服务名

start|stop|status|restart

#这个是redhat系列的专有命令

#默认源码包服务例外,不能由以上命令启动。

③    独立服务的自启动的三种方式

A、chkconfig [--level 运行级别] [独立服务名] [on|off]

B、修改/etc/rc.d/rc.local文件(区别A和C的独立一种方法,推荐使用)

C、使用ntsysv命令管理自启动(redhat专有命令)

二、 基于xinetd服务的管理

①    安装xinetd

[root@localhost ~]# yum -y install xinetd

 

②    xinetd服务的启动

#能够先查看rsync的端口号:grep rsync  /etc/services

[root@localhost ~]# vi /etc/xinetd.d/rsync

service rsync(服务名称)

{

disable = yes

flags           = IPv6(设定TCP/IP socket可重用)

socket_type     = stream(使用TCP协议数据包)

wait            = no(容许多个链接同时链接)

user            = root(启动服务的用户为root)

server          = /usr/bin/rsync(服务的启动程序)

server_args     = --daemon

log_on_failure  += USERID(登录失败后,记录用户的ID)

}

把文件中的disable改为这个disable(不能)=no

注意重启的是xinetd服务:service xinetd restart

③    xinetd服务的自启动两种方法

a、[root@localhost ~]# chkconfig rsync on

b、ntsysv

注:xinetd的启动是混为一谈,启动与自启动是通用的。

3) 源码包服务管理

一、 源码包安装服务的启动

使用绝对路径,调用启动脚原本启动。不一样的源码包的启动脚本不一样。能够查看源码包的安装说明,查看启动脚本的方法。

二、 源码包服务的自启动

把服务的绝对路径加入/etc/rc.d/rc.local文件中,绝对路径可经过安装文档查看(INSTALL)

三、 让源码包服务被服务管理命令识别

①    让源码包的某服务(如apache服务)能被service命令管理启动即建立软连接:ln -s /usr/local/apache2/bin/apachectl  /etc/init.d/apache

②    让源码包的某服务(如apache服务)能被chkconfig与ntsysv命令管理自启动

[root@localhost ~]# vi /etc/init.d/apache

加入如下两句话:

#chkconfig:35 86 76

(指定httpd脚本能够被chkconfig命令管理。格式是:

chkconfig:运行级别 启动顺序关闭顺序) 

#description:source package apache

(文档说明至关于注释,必需要加)

说明:启动、关闭顺序号不能跟/etc/rc3.d/目录下现有的顺序重复

35 启动级别

86 启动顺序

76 关闭顺序

加入红色标记的两句话以后,还要执行下面的语句才生效:

[root@localhost ~]# chkconfig --add apache

③    chkconfig和ntsysv是通用的,chkconfig能管理,就能被ntsysv管理。

4) 服务管理总结

 

 

3、系统管理

1) 进程管理

一、 进程管理简介

定义:进程是正在执行的一个程序或命令,每个进程都是一个运行的实体,都有本身的地址空间,并占用必定的系统资源。

做用:判断服务器健康状态;查看系统中全部进程;杀死进程

二、 进程的查看-ps命令和pstree命令

①ps aux  #查看系统中全部进程,使用BSD操做系统格式

②ps -le  #查看系统中全部进程,使用linux标准命令格式

选项

a:显示一个终端的全部进程,除了会话引线

u:显示进程的归属用户及内存的使用状况

x:显示没有控制终端的进程

-l:长格式显示。显示更加详细的信息

-e:显示全部进程,和-A做用一致

③查看进程信息:

USER:该进程是由哪一个用户产生的;

PID:进程的ID号;

%CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源;

%MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源;

VSZ:虚拟内存的大小,单位KB;

RSS:实际物理内存的大小,单位KB;

TTY:该进程是在哪一个终端中运行的。其中tty1~tty7表明本地控制台终端,

                             tty1-tty6是本地的字符界面终端,tty7是图形终端。pts/0 -255表明

虚拟终端。不少都是?表示不少进程都是系统进程

                      注:在linux中,/sbin/init是全部的进程的父进程,进程ID永远都是1。

STAT:进程状态。

常见的状态有:

R:运行

     S:睡眠

     T:中止状态

     s:包含子进程

     +:位于后台

START:该进程的启动时间

TIME:该进程占用CPU的运算时间,注意不是系统时间

COMMAND:产生此进程的命令名

④查看进程树

[root@localhost etc]# pstree [选项]

选项:

-p:显示进程PID

-u:显示进程的所属用户

三、 进程的查看-top命令

[root@localhost ~]# top [选项]

选项:

-d 秒数:指定top命令每隔几秒更新,默认是3秒

-b:使用批处理模式输出。通常和“-n”选项合用

-n次数:指定top命令执行的次数,通常和“-b”选项合用

                 使用top查看全部进程:

[root@localhost ~]# top -b -n 1 > /root/top.log

在top命令的交互模式中能够执行的命令:

?或者h :显示交互模式的帮助

P:以CPU使用率排序 默认就是此项

M:之内存的使用率排序

N:以PID排序

q:推出top

①第一行信息为任务队列信息

内容

说明

21:05:56

系统当前时间

up 1 day,13:32

系统的运行时间,本机已经运行1天13小时32分钟

2 users

当前登陆了两个用户

Load average:0.00,0.00,0.00

系统在以前1分钟,5分钟,15分钟的平均负载。通常认为小于1时,负载较小。若是大于1,系统已经超出负荷。(依核数来断定,默认1)

                      有计划的重启是服务器维护的基本原则。

②第二行为进程信息

内容

说明

Task:95  total

系统中的进程总数

1 running

正在运行的进程数

94 sleeping

睡眠的进程

0 stopped

正在中止的进程

0 zombie

僵尸进程。若是不是0,须要手工检查僵尸进程

 

③第三行

内容

说明

Cpu(s):0.1%us

用户模式占用的CPU百分比

0.1%sy

系统模式占用的CPU百分比

0.0%ni

改变过优先级的用户进程占用的CPU百分比

99.7%id

空闲CPU的CPU百分比(不能低于20%)

0.1%wa

等待输入/输出的进程的占用CPU百分比

0.0%hi

硬中断请求服务占用的CPU百分比

0.1%si

软中断请求服务占用的CPU百分比

0.0%st

st(steal time)虚拟时间百分比。就是当有时,虚拟CPU等待实际CPU的时间百分比。

 

④第四行

内容

说明

Mem:625344k total

物理内存的总量,单位kb

571504k used

已经使用的物理内存数量

53840k free

空闲的物理内存数量

65800k buffers

做为缓冲的内存数量(加速数据的写入)

 

⑤第五行

内容

说明

Swap: 524280k total

交换分区(虚拟内存)的总大小

0k used

已经使用的交互分区大小

524280k free

空闲交换分区的大小

409280k cached

做为缓存的交互分区的大小(加速数据的读取)

四、 杀死进程

①    kill命令

[root@localhost ~]# kill -l

#查看可用的进程信号

[root@localhost ~]# kill -1 进程号

#重启进程

[root@localhost ~]# kill -9 进程号

#强制杀死进程

信号代号

信号名称

说明

1

SIGHUP

该信号让进程当即关闭,而后从新读取配置文件以后重启(平滑重启)

2

SIGINT

程序终止信号,用于终止前台进程。至关于输出ctrl+c快捷键。

8

SIGFPE

在发生致命的算术运算错误时发出,不只包括浮点运算错误,还包括溢出及除数为0等其它全部的算术的错误。

9

SIGKILL

用来当即结束程序的运行,本信号不能被阻塞、处理和忽略。通常用于强制终止进程。

14

SIGALRM

时钟定时信号,计算的是实际时间或时钟时间,alarm函数使用该信号。

15

SIGTERM

正常结束进程的信号,kill命令的默认信号。有时若是进程已经发生问题,这个信号是没法正常终止进程的,咱们才会尝试SIGKILL信号,也就是信号9。

18

SIGCONT

该信号可让暂停的进程恢复执行,本信号不能被阻断。

19

SIGSTOP

该信号能够暂停前台进程,至关于输入ctrl+z快捷键。本信号不能被阻断。

 

②    killall命令

killall [选项][信号] 进程名

#按照进程名杀死进程

选项:

          -i:交互式,询问是否要杀死某个进程

          -I:忽略进程名的大小写(此处是大写的i)

③    pkill命令

pkill [选项][信号] 进程名

#按照进程名终止进程

选项:

          -t 终端号:按照终端号踢出用户

 

④    按照终端号踢出用户

w

#使用w命令查询本机已经登陆的用户

pkill -9 -t pts/1

#强制杀死从pts/1虚拟终端登陆的进程

五、 修改进程优先级

①    简介

Linux操做系统是一个多用户、多任务的操做系统,Linux系统中一般运行着很是多的进程。可是CPU在同一个时钟周期内只能运算一个指令。进程优先级决定了每一个进程处理的前后顺序

 

PRI表明Priority,NI表明Nice。这两个值都是优先级,数字越小表明该进程优先级越高。最终生效的是PRI,可是无论是超级用户仍是普通用户都不能直接修改PRI这个优先级进程,只能修改NI这个优先级进程,系统最终生效的是PRI+NI的值。

②    修改NI值时有几个注意事项

  •   NI值得范围是-20到19;
  •   普通用户调整NI值得范围是0到19,并且只能调整本身的进程;
  •   普通用户只能调高NI值,而不能下降,如本来NI值为0,则只能调整为大于0;
  •   root用户才能设定进程的NI值为负值,并且能够调整任何用户的进程。
  •   PRI(最终值)=PRI(原始值)+NI
  •   用户只能修改NI的值,不能直接修改PRI

③    nice命令

nice [选项] 命令

#nice命令能够给新执行的命令直接赋予NI值,可是不能修改已经存在进程的NI值

选项:

  -n NI值:给命令赋予NI值。

例如:nice -n -5 service httpd start

④    renice命令

renice [优先级] PID

#renice命令是修改已经存在进程的NI值得命令

例如:renice -10 2125

2) 工做管理

①    工做管理简介

工做管理:指的是在单个登陆终端中(shell界面)同时管理多个工做行为。

[root@localhost ~]# jobs(查看在后台运行的程序)

Linux后台运行:命令后面加上“ &”

注意事项:

  •   当前的登陆终端,只能管理当前终端的工做,而不能管理其余登陆终端的工做
  •   放入后台的命令必须能够持续运行一段时间,这样咱们才能捕捉和操做这个工做
  •   放入后台执行的命令不能和前台用户有交互或须要前台输入,不然放入后台只能暂停,而不能执行

②    工做管理方法

  •   把进程放入后台

tar -zcf etc.tar.gz /etc &

#把命令放入后台,并在后台执行

top

#按下ctrl+z快捷键,放在后台暂停

  •   查看后台的工做

jobs [-l]

选项:

        -l:显示工做的PID

注:“+”号表明最近一个放入后台的工做,也是工做恢复时,默认恢复的工做。“-”号表明倒数第二个放入后台的工做

  •   将后台暂停的工做恢复到前台执行

[root@localhost ~]# fg %工做号

参数:

        %工做号:%号能够省略,可是注意工做号(第一列显示的[1]、[2]、[3]等这样的数字)和PID的区别

例如:[root@localhost ~]# fg %1

  •   把后台暂停的工做恢复到后台执行

[root@localhost ~]# bg %工做号

注:后台恢复执行的命令,是不能和前台有交互的,不然不能恢复到后台执行

③    后台命令脱离登陆终端执行

  •   简介:把命令放入后台,只能在当前登陆终端执行。一旦退出或关闭终端,后台程序就会中止
  •   后台命令脱离登陆终端执行的方法:

方法1.把须要后台执行的命令加入/etc/rc.local文件

方法2.使用系统定时任务,让系统在指定的时间执行某个后台命令

方法3.使用nohup命令(推荐使用)

  •   nohup命令

nohup [命令] &

 

3) 系统资源查看

①    vmstat命令监控系统资源

vmstat [刷新延时][刷新次数]

例如:vmstat 1 3

 

procs:进程信息字段

-r:等待运行的进程数,数量越大,系统越繁忙

-b:不可被唤醒的进程数量,数量越大,系统越繁忙。

memory:内存信息字段

-swpd:虚拟内存的使用状况,单位kb

-free:空闲的内存容量,单位为KB

-buff:缓冲的内存容量,单位为KB

-cache:缓存的内存容量,单位为KB

swap:交换分区的信息字段

-si:从磁盘中交换到内存中数据的数量,单位KB

-so:从内存中交换到磁盘中数据的数量,单位KB。此两个数越大,证实

数据须要常常在磁盘和内存之间交换,系统性能越差。

io:磁盘读写信息字段

-bi:从块设备读入数据的总量,单位是块。

-bo:写到块设备的数据的总量,单位是块,此两个值越大,表明系统的

I/O越繁忙。

system:系统信息字段

-in:每秒被中断进程的次数

-cs:每秒进行的事件切换次数。此两个数越大,表明系统与接口设备的

通讯很是繁忙

CPU:CPU信息字段

-us:非内核进程消耗CPU运算时间的百分比

-sy:内核进程消耗CPU运算时间的百分比

-id:空闲CPU的百分比,值越小表明系统越繁忙

-wa:等待I/O所消耗的CPU百分比

-st:被虚拟机所盗用的CPU占比

                    

②    缓存和缓冲的区别

简单来讲缓存(cache)是用来加速数据从硬盘中“读取”的,而缓冲(buffer)是用来加速数据“写入”硬盘的。

③    dmesg开机时内核检测信息(判断当前服务器的硬件状态)

[root@localhost ~]# dmesg

例如:[root@localhost ~]# dmesg | grep CPU

④    free命令查看内存使用状态

[root@localhost ~]# free [-b|-k|-m|-g]

选项:

-b:以字节为单位显示

-k:以KB为单位显示,默认此单位

-m:以MB为单位显示

-g:以GB为单位显示

第一行:total是总内存数,used是已经使用的内存数,free是空闲的内存数,

shared是多个进程共享的内存总数,buffers是缓冲内存数,cached

是缓存内存数。默认单位是KB。

第二行:-/buffers/cache的内存数,至关于第一行的used-buffers-cached

           +/buffers/cache的内存数,至关于第一行的free+buffers+cached

第三行:total是swap的总数;used是已经使用的swap数,free是空闲的

            swap数,默认单位KB。

⑤    查看CPU信息

[root@localhost ~]# cat /proc/cpuinfo

⑥    uptime命令

[root@localhost ~]# uptime

显示系统的启动时间和平均负载,也就是top命令的第一行。w命令也能够看这个数据。

⑦    查看系统与内核相关信息

uname [选项]

选项:

-a 查看系统全部相关信息

-r 查看内核版本

-s 查看内核名称

⑧    判断当前系统的位数

[root@localhost ~]# file /bin/ls

⑨    查询当前linux系统的发行版本

[root@localhost ~]# lsb_release -a

⑩    列出进程打开或使用的文件信息

lsof [选项]

选项:

-c  字符串:只列出以字符串开头的进程打开的文件

-u 用户名:只列出某个用户的进程打开的文件

-p pid:列出某个PID进程打开的文件

例如:

lsof | more

#查询系统中全部进程调用的文件

lsof /sbin/init

#查询某个文件被哪一个进程调用(必须是系统文件)

lsof –c httpd

#查看httpd进程调用了哪些文件

lsof –u root

#按照用户名,查询某用户的进程调用的文件名

4) 系统定时任务

一、 at一次性定时任务

①    肯定at安装

[root@localhost ~]# chkconfig --list | grep atd

#at服务是否安装

[root@localhost ~]# service atd restart

#at服务的启动

②    at的访问控制

  •   若是系统中有/etc/at.allow文件,那么只有写入/etc/at.allow文件(白名单)中的用户可使用at命令(/etc/at.deny文件会被忽略)
  •   若是系统中没有/etc/at.allow文件,只有/etc/at.deny文件,那么写入/etc/at.deny文件(黑名单)中的用户不能使用at命令。对root不起做用。
  •   若是系统中这两个文件都不存在,那么只有root用户可使用at命令。

③    at命令

at [选项] 时间

选项:

-m:当at工做完成后,不管是否命令有输出,都用email通知执行at

命令的用户

-c 工做号:显示该at工做的实际内容

时间:

HH:MM                        例如:02:30

HH:MM YYYY-MM-DD           例如:02:30 2013-07-25

HH:MM[am|pm]  [month][date]  例如:02:30 July 25

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

例如:now+5 minutes

举例:

at now + 2 minutes   #在两分钟后执行脚本。

#写完回车,出现下面的at提示符,提示你输入要执行的脚本和重定向

路径

at> /root/helo.sh >> /root/helo.log

④    其余at管理命令

atq #查询当前服务器上的at工做

atrm[工做号] #删除指定的at任务

⑤     

二、 crontab循环定时任务

①    crond服务管理与访问控制

[root@localhost ~]# service crond restart

[root@localhost ~]# chkconfig crond on    #开启crond服务

②    访问控制

当系统中有/etc/cron.allow文件时,只有写入此文件的用户可使用crontab命令,没有写入的用户不能使用crontab命令。一样若是有此文件,/etc/cron.deny文件会被忽略,/etc/cron.allow文件的优先级更高。

 

当系统中只有/etc/cron.deny文件时,则写入此文件的用户不能使用crontab命令,没有写入文件的用户可使用crontab命令

③    用户的crontab设置

[root@localhost ~]# crontab [选项]

选项:

          -e:编辑crontab定时任务

          -l:查询crontab任务

          -r:删除当前用户全部的crontab任务

举例:

[root@localhost ~]# crontab -e

#进入crontab编辑界面。

* * * * * 执行的任务

 

项目

含义

范围

第一个“*”

一个小时当中的第几分钟

0-59

第二个“*”

一天当中的第几小时

0-23

第三个“*”

一个月当中的第几天

1-31

第四个“*”

一年当中的第几月

1-12

第五个“*”

一周当中的星期几

0-7(0和7都表明星期日)

特殊符号

含义

*

表明任什么时候间。好比第一个“*”就表明一小时中每分钟都执行一次的意思。

表明不连续的时间。好比“0 8,12,16 * * * 命令”,就表明在天天的8点0分,12点0分,16点0分都执行一次命令

-

表明连续的时间范围。好比“0 5 * * 1-6 命令”,表明在周一到周六的凌晨5点0分执行命令

*/n

表明每隔多久执行一次。好比“*/10 * * * * 命令”,表明每隔10分钟就执行一遍命令

 

时间

含义

45 22 * * * 命令

在22点45分执行命令

0 17 * * 1 命令

每周1的17点0分执行命令

0 5 1,15 * * 命令

每个月1号和15号的凌晨5点0分执行命令

40 4 * * 1-5 命令

每周一到周五的凌晨4点40分执行命令

*/10 4 * * * 命令

天天的凌晨4点,每隔10分钟执行一次命令

0 0 1,15 * 1 命令

每个月1号和15号,每周1的0点0分都会执行。注意:星期几和几号最好不要同时出现,由于它们定义的都是天。很是容易让管理员混乱

 

④    经常使用命令

[root@localhost ~]# crontab -l

#查看root用户的crontab任务

[root@localhost ~]# crontab -r

#删除root用户全部的定时任务

⑤    crontab注意事项

  •   六个选项不能为空,必须填写。不肯定用“*”表明任意时间;
  •   crontab定时任务最小有效时间为分钟,最大时间范围是月;
  •   日期和星期最好不要同时出现,由于它们都是以天做为单位;
  •   在定时任务中,无论是直接写命令仍是在脚本中写命令,最好都写绝对路径。

 

三、 系统的crontab设置

①    系统的定时任务

“crontab -e”是每一个用户执行的命令,也就是说不一样的用户身份能够执行本身的定时任务(不能执行超出本身权限的任务)。但是有些定时任务(如只有root用户权限才能执行的:关机、添加用户等)须要系统执行,这时咱们就须要编辑/etc/crontab这个配置文件。

②    CentOS 5中的配置文件

[root@localhost ~]# vi /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

 

# run-parts

01 * * * * root run-parts /etc/cron.hourly

02 4 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.mouthly

其中run-parts是一个命令或者程序,是遍历目标文件夹,执行第一层目录下的可执行权限的文件。

③    执行系统的定时任务的方法

  •   手工执行定时任务
  •   系统定时任务

第一种是把须要定时执行的脚本复制到

/etc/cron.{hourly,daily,weekly,mouthly}目录中的任意一个

第二种是修改/etc/crontab配置文件

四、 anacron配置

①    定义

anacron是用来保证在系统关机的时候错过的定时任务,能够在系统开机以后再执行。

②    anacron检测周期

  •   anacron会使用一天,七天,一个月做为检测周期;
  •   在系统的/var/spool/anacron/目录中存在

cron.{daily,weekly,monthly}文件,用于记录上次执行cron的时间;

  •   和当前时间作比较,若是两个时间的差值超过了anacron的指定时间差值,证实有cron任务被漏执行;

③    CentOS 6.x的区别

  •   在老的CentOS版本中,/etc/cron.{daily,weekly,monthly}这些目录即会被cron调用,也会被anacron调用,容易重复执行;
  •   在CentOS 6.x中则只会被anacron调用,避免了重复执行;
  •   在CentOS 6.x中,anacron再也不是服务,而是系统命令

④    Anacron配置文件

[root@VM_68_42_centos ~]# cat /etc/anacrontab

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

# the maximal random delay added to the base delay of the jobs

RANDOM_DELAY=45(最大随机延迟,单位:分钟)

# the jobs will be started during the following hours only

START_HOURS_RANGE=3-22

(anacron的执行时间范围是3:00-22:00)

#period in days   delay in minutes   job-identifier   command

1       5       cron.daily        nice run-parts /etc/cron.daily

7       25      cron.weekly      nice run-parts /etc/cron.weekly

@monthly 45    cron.monthly     nice run-parts /etc/cron.monthly

(天数  强制延迟(分) 工做名称  实际执行的命令)

⑤    cron.daily工做来讲明执行过程

  •   首先读取/var/spool/anacron/cron.daily中的上一次anacron执行的时间;

  和当前时间比较,若是两个时间的差值超过1天,就执行cron.daily工做;

  •   执行这个工做只能在03:00-22:00之间;
  •   执行工做时强制延迟时间为5分钟,再随机延迟0-45分钟时间;
  •   使用nice命令指定默认优先级,使用run-parts脚本执行

/etc/cron.daily目录中的全部可执行文件

相关文章
相关标签/搜索