• Linux之服务管理


    一、计划任务

    1) Crontab简介

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

    2、被周期性执行的任务我们称为Cron Job;

    3、周期性执行的任务列表我们称为Cron Table。

    2) Crontab实践

    1、 相关工具

    #Putty

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

    #http://www.putty.org/

    2、 安装并检查Crontab服务

    ①检查cron服务

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

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

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

    yum install vixie-cron

    yum install crontabs

    ③案例实现

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

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

    3、 Crontab的基本组成

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

     

    4、 Crontab的配置文件格式

     

     

     

    案例:

    ①每晚的21:30重启apache

    30 21 * * * service httpd restart

     

    ②每月1、10、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分钟(小时等)执行一次命令

    5、 Crontab工具的使用

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

    crontab -l -u 用户名

    #修改某用户的计划任务

    crontab -e -u 用户名

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

    /var/spool/cron

    6、 Crontab的日志

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

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

    7、 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的常见错误

    1、 环境变量

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

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

    4、 分钟设置误用

    二、服务管理

    1) 简介与分类

    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:

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

    2、 服务的分类

     

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

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

    ①    查询已安装的服务

    • RPM包安装的服务

    [root@localhost ~]# chkconfig --list

    #查看服务自启动状态,可以看到所有RPM包安装的服务(独立服务)

    • 源码包安装的服务

    #查看服务安装位置,一般是/usr/local/下

    ②    查看xinetd服务

    需要安装xinetd服务本身

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

    ③    启动与自启动

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

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

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

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

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

    #RPM包安装在默认位置中

    3、 服务与端口

    ①    端口的定义

    如果把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包服务管理

    1、 独立服务的管理

    ①    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专有命令)

    2、 基于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) 源码包服务管理

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

    使用绝对路径,调用启动脚本来启动。不同的源码包的启动脚本不同。可以查看源码包的安装说明,查看启动脚本的方法。

    2、 源码包服务的自启动

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

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

    ①    让源码包的某服务(如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) 服务管理总结

     

     

    三、系统管理

    1) 进程管理

    1、 进程管理简介

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

    作用:判断服务器健康状态;查看系统中所有进程;杀死进程

    2、 进程的查看-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:显示进程的所属用户

    3、 进程的查看-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

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

    4、 杀死进程

    ①    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虚拟终端登录的进程

    5、 修改进程优先级

    ①    简介

    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) 系统定时任务

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

    ⑤     

    2、 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定时任务最小有效时间为分钟,最大时间范围是月;
    •   日期和星期最好不要同时出现,因为它们都是以天作为单位;
    •   在定时任务中,不管是直接写命令还是在脚本中写命令,最好都写绝对路径。

     

    3、 系统的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配置文件

    4、 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目录中的所有可执行文件

     

  • 相关阅读:
    localhost 和 127.0.0.1 认识
    postgreSQL可视化工具pgAdmin3 导入表结构和数据
    posgreSQL安装失败解决方案
    C#面向对象基本概念总结
    关于数据存储(关系型数据库和非关系型数据库)
    ADO.NET中的五大内置对象
    关于XML
    WPF中TreeView控件SelectedItemChanged方法的MVVM绑定
    WPF中使用MVVM进行multibinding
    WPF中TreeView控件数据绑定和后台动态添加数据(二)
  • 原文地址:https://www.cnblogs.com/huhyoung/p/6670369.html
Copyright © 2020-2023  润新知