Linux例行工作

  1. Linux工作调度的种类
    • at:at是个可以处理仅执行一次就结束调度的命令,不过要执行at,必须有atd服务。某些新版的distributions中,atd可能默认没有启动。
    • crontab:crontab所设置的工作将会循环一直进行下去。这个命令除了可以使用命令执行外,也可以编辑/etc/crontab来支持。让crontab生效的服务则是crond这个服务。
  2. Linux上常见的例行工作
    • 进行日志文件的轮替(log rotate):适时将日志文件数据挪一挪,让旧数据与新数据分别存放,则比较可以有效地记录日志信息。
    • 日志文件分析logwatch的任务:系统发生软件问题,硬件错误,绝大部分的错误信息都会被记录在日志文件中,因此系统管理员的重要任务之一就是分析日志文件。所以CentOS提供了logwatch来主动分析日志信息。
    • 新建locate数据库:locate命令是通过已经存在的文件名数据库来进行系统文件名的查询。文件名数据库是放置再/var/lib/mlocate/中。系统更新这个数据库就是通过update。
    • whatis数据库的建立:whatis是与man page有关的一个查询命令,不过要使用whatis命令时,必须拥有whatis数据库,而这个数据库也是通过系统例行工作调度来自动执行的。
    • RPM软件日志文件的新建/RPM是一种软件管理的机制。由于系统可能会经常更改软件,包括软件的新安装,非经常性更新等,都会造成软件文件名的区别。为了方便追踪,系统帮我们将文件名做个排序的记录。
    • 删除临时文件:某些软件再运行时会生成临时文件,但是当这个软件关闭的时候,临时文件可能不会主动删除。系统通过例行工作调度执行名为tmpwatch的命令来删除这些临时文件。
    • 与网络服务有关的分析行为:如果安装了WWW服务器软件,那么你的Linux系统通常就会主动分析该软件的日志文件,同时某些认证的网络信息是否过期的问题,这些Linux都会自动帮你检查。
  3. 仅执行一次的工作调度
    • atd的启动和at运行的方式
      要使用单一工作调度,必须开启atd

      [root@www~]# /etc/init.d/atd restart                    <==启动atd
      [root@www~]# chkconfig atd on                         <==设置开机时启动这个服务,免得每次重新启动都要再来一次
      
    • at的运行方式
      我们用at命令来生成所要运行的工作,并将这个工作以文本文件的方式写入/var/spool/at目录内,该工作便能等待atd这个服务的取用与执行了。

      • 我们可以用/etc/at.allow这个文件,写在这个文件中的用户才能使用at,没有在这个文件中的用户则不能使用at(即使没有写在at.deny中)
      • 如果/etc/at.allow不存在,就寻找/etc/at.deny这个文件,若写在这个at.deny的用户则不能使用at,而没有在这个at.deny文件中的用户就可以使用at
      • 如果两个文件都不存在,那么只有root可以使用at命令
    • 实际运行单一工作调度

      [root@www~]# at [-mldv] TIME
      [root@www~]# at -c 工作号码
      
      参数含义
      -m当at工作完成后,即使没有输出信息,以email通知用户该工作完成
      -lat -l相当于atq,列出目前系统上面的所有该用户的at调度
      -dat -d相当于atrm,可以取消一个在at调度中的工作
      -v可以使用较明显的时间格式列出at调度中的任务列表
      -c可以列出后面接的该项工作的实际命令内容

      TIME时间格式:这里可以定义什么时候要进行at这项工作的时间

      格式含义
      HH:MM几点几分,如果今天已经超过了,就要明天这个时候进行 ex>04:00
      HH:MM YYYY-MM-DD强制规定在某年某月某日某一天的特殊时刻进行该工作 ex>04:00 2019-01-17
      HH:MM[am|pm] [Month] [Date]强制规定在某年某月某日某一天的特殊时刻进行该工作 ex>04:00 am March 17
      HH:MM[am|pm] + number [minutes|hours|days|weeks]在某个时间点再加上几个时间之后,ex>04pm + 3 days
      [root@www~]# at now + 5 minutes    #执行at会进入at shell环境,让你执行多重命令
      at> /bin/mail root -s "testing at job" < /root/.bashrc
      at> <EOT>   <==这里输入[ctrl]+d就会出现<EOF>,代表结束
      job 4 at 2009-03-14 15:38      #说明第4个at工作将会在2009年/03/14的15:38进行
      
      [root@www~]# at 23:00 2009-03-07
      at> /bin/sync
      at> /bin/sync
      at> /sbin/shutdown -h now
      at> <EOT>
      job 5 at 2009-03-17 23:00
      

      注意,如果at shell命令内没有任何信息输出,那么at默认不会发Email给执行者,如果想让at命令无论如何都要发送Email,那么就要用at -m命令。
      由于at在工作调度的使用上,系统会将该项at工作独立出你的bash环境,直接交给系统的atd程序来接管,因此,当你执行了at的工作之后就可以立刻脱机,剩下的工作就完全交给Linux管理即可。
      at的工作管理,执行了at之后才发现命令错误,可以利用atq和atrm把它删除。

      [root@www~]# atq
      [root@www~]# atrm [jobnumber]
      例子:
      查询目前主机上有所少个at工作调度
      [root@www~]# atq
      5    2009-03-17 23:00 a root
      #上面的意思是在2009/03/17的23:00有一项工作,该工作命令执行者为root,而且,该项工作的工作号码是5
      [root@www~]# atrm 5          #说明删除工作号为5的工作
      [root@www~]# atq              #没有显示任何信息,说明工作已经被删除
      

      如果你是在一个非常忙碌的系统下运行at,那么你可以通过batch指定你的工作在系统较闲的时候进行。
      batch可以指定在系统有空时才进行后台任务,它会在CPU工作负载小于0.8的时候,才进行你所执行的工作任务。负载的意思是CPU在单一时间点所负责的工作数量,不是CPU的使用率。

      #同样进行关机操作,但是如果当时系统负载太高,则暂缓执行
      [root@www~]# batch 23:00 2009-03-17
      at> sync
      at> sync
      at< shutdown -h now
      at> <EOT>
      job 6 at 2009-03-17 23:00
      
  4. 循环执行的例行性工作调度
    相对于at是仅执行一次的工作,循环执行的例行性工作调度则是由cron(crond)这个系统服务来控制的。
    • 用户设置
      /etc/cron.allow 将可以使用crontab的账号写入其中,若不在这个文件内的用户则不可使用crontab。
      /etc/cron.deny 将可以使用crontab的账号写入其中,若未记录到这个文件当中的用户则可以使用crontab
      以优先级来说,cron.allow的优先级高于cron.deny。当用户使用crontab这个命令来新建工作调度之后,该项工作就会被记录到/var/spool/cron里面,而且是以账号来作为判别。举例,用户名为dmtsai使用crontab后,他的工作会被记录到/var/spool/cron/dmtsai里面。注意,不要使用vi直接编辑文件,因为可能由于输入语法错误,会导致无法执行cron。
      crontab参数
      参数含义
      -u只有root才能进行这个任务,也即帮其他用户新建/删除crontab工作调度
      -e编辑crontab的工作内容
      -l查阅crontab工作内容
      -r删除所有crontab的工作内容,若要删除一项,请用-e去编辑
      [root@www~]# crontab -e    #用dmtsai的身份在每天的12:00发信给自己
      #此时会进入vi编辑界面让你编辑工作,注意每一项工作都是一行
      0 12 * * * mail dmtsai -s "at 12:00" < /home/dmtsai/.basgrc 
      #分 时 日 月 周 |<========命令串=================>|
      
      代表意义分钟小时日期月份命令
      数字范围0~590~231~311~120~7命令
      注意周的部分,0或者7都代表星期天。同时还有一些辅助字符。
      特殊字符代表意义
      *任何时刻都接受的意思。如果日,月,周都是*号,代表不论何月何日的星期几
      ,代表分隔时段的意思,举例子,如果执行工作是3:00到6:00,所以就是0 3,6 * * * command
      -代表一段时间范围,举例,8点到12点之间每小时的20分都进行一项工作 20 8-12 * * * command
      /n(斜线)那个n代表数字,即是每隔n单位间隔的意思,例如每五分钟进行一次,则*/5 * * * * command 也可以把*/5写成0-59/5
    • 系统的配置文件:/etc/crontab
      crontab -e 这个命令是针对用户,如果是系统的例行性任务,就不需要以crontab -e 来管理你的例行性工作调度,只需要编辑/etc/crontab这个文件就可以。其中有一点需要注意,crontab -e 这个crontab其实是/usr/bin/crontab这个执行文件,但是/etc/craontab是一个纯文本文件。
      基本上,cron这个服务的最低检测限制就是分钟,所以cron会每分钟去读取一次/etc/crontab与/var/spool/cron里面的数据内容,因此,只要你编辑完/etc/crontab这个文件,并且将它保存之后,那么cron的设置就会自动会来执行。
      查看/etc/crontab的内容
      [root@www~]# cat /etc/crontab
      SHELL=/bin/bash       <==使用哪种shell接口
      PATH=/sbin:/bin:/usr/sbin:/usr/bin        <==执行文件查找路径
      MAILTO=root        <==若有额外STDOUT,以email将数据送给谁
      HOME=/                   <==默认此shell的主文件夹所在
      
      #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.weekly  <==每个月1号
      
      在crontab里面一些字段的含义
      字段含义
      MAILTO=root当/etc/crontab这个文件中的例行性工作的命令发生错误时,或者是该工作
      PATH=…这里输入的是执行文件的查找路径,使用默认的路径设置就已经足够了
      01 * * * * root run-parts /etc/cron.hourly如果想让系统每小时主动帮你执行某个命令,就将该命令写成script,并将该文件放置到/etc/cron.hourly/目录下即可
  5. 可唤醒停机期间的工作任务
    • 如果Linux主机是24小时全天,全年无休的服务器,那么你只要ad与crond这两个服务来管理例行工作即可,但是如果你的服务器并非24小时不关机,那么就需要用anacron。
      anacron不是用来指定何时执行任务的,而是以天为单位或者是在开机之后立刻进行anacron的操作的,它会去检测停机期间应该进行但是没有进行的crontab任务,并将该任务执行一遍,然后anacron就会自动停止。anacron其实也是通过crontab来进行的,因此anacron运行的时间通常有两个,一个是系统开机期间运行,一个是写入crontab的调度中
    • anacron与/etc/anacrontab
      anacron其实是一个程序并非一个服务。基本上anacron的语法如下
      [root@www~]# anacron [-sfn] [job]
      [root@www~]# anacron -u [job]
      
      参数含义
      -s开始连续执行各项工作,会依据时间记录文件的数据判断是否进行
      -f强制进行,而不去判断时间记录文件的时间戳
      -n立刻进行未进行的任务,而不延迟等待时间
      -u仅更新时间记录文件的时间戳,不进行任何工作
      job由/etc/anacrontab定义的各项工作名称
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值