Chinaunix首页 | 论坛 | 博客
  • 博客访问: 40604
  • 博文数量: 18
  • 博客积分: 474
  • 博客等级: 下士
  • 技术积分: 260
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-20 10:08
文章分类

全部博文(18)

文章存档

2011年(18)

分类: LINUX

2011-06-20 16:19:23

一、计划任务
    定时、周期性地完成的任务。

    atd
        比较简单,没有配置文件
        只执行一次的任务,不会周期性地重复
    crond
        可以实现较为复杂的设定,可以周期性重复执行。
    anacron
        辅助crond,完成那些没有及时完成的任务。



1、atd

# service atd start

# at 09:54
at> wall "Hi,i am atd"
at> <---新的空白行,然后ctrl + d
job 1 at 2011-05-29 09:54

查看任务队列
# atq
1       2011-05-29 09:54 a root

查看具体内容

# at -c 1 <--- 1是计划任务的编号

任务对应的物理的配置文件(at命令生成的任务脚本)
# ls /var/spool/at/
a00002014c4b58  spool


atd访问控制
    /etc/at.allow  <--- 允许使用atd的用户,每行一个用户
    /etc/at.deny  <---拒绝使用atd的用户
        两个文件同时存在,at.allow优先而at.deny就会失效



设定执行计划的时间点已经过了,任务还是会被执行的。


2、crond


# vim /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.monthly

时间设定

              field          allowed values
              -----          --------------
              minute         0-59
              hour           0-23
              day of month   1-31
              month          1-12 (or names, see below)
              day of week    0-7 (0 or 7 is Sun, or use names)


分    时    日    月    星期
*    *    *    *    *    每分钟执行任务
5    *    *    *    *    每小时第5分钟执行
5-8    *    *    *    *    每小时第5、6、7、8分钟执行
*/5    *    *    *    *    每5分钟执行一次
5,15,27    *    *    *    *    每小时第5,15,27分执行

30    2    *    *    *    每天2:30执行任务

30    20    15    *    *    

30    20    15    *    7    每个月的15号或者是每个周日..


具体任务的设定
run-parts /etc/cron.hourly <---run-parts是命令 ,/etc/cron.hourly 是参数 。该任务的作用就是使用run-parts读取/etc/cron.hourly所有脚本文件,然后去执行


30 20 * * *  root  /sbin/init 0
或者
30 20 * * *  root  (/sbin/init 0)
多条指令
30 20 * * *  root  (sync ; /sbin/init 0)

命令实在太多了,用脚本代替

30 2 * * *  roor  /root/shell/my_script.sh <---脚本
    注意: 确保my_script.sh有执行权限。



任务的执行情况可以在/var/log/cron日志中得以体现。



练习:
    指定一个任务,每两分钟把当前的时间追加到/tmp/time.log

1、确定crond服务是运行

2、# vim /etc/crontab 《--编写好,马上生效
*/2 * * * * root (echo `date` >> /tmp/time.log)



思考:如何实现以秒单位作为时间间隔的任务呢
    例如:每30秒与服务器同步一次时间。

编写脚本

shell> /etc/updatetime.sh
#!/bin/bash
while
do
    /usr/sbin/ntpdate 10.1.1.1 >/dev/null 2>/dev/null
    sleep 30
done

shell> chmod 755 /etc/updatetime.sh

shell> echo '/etc/updatetime.sh &' >> /etc/rc.d/rc.local
    注意: &别忘记了


或者直接把代码rc.local
shell> vim /etc/rc.d/rc.local
while : ; do /usr/sbin/ntpdate 10.1.1.1 >/dev/null 2>/dev/null; sleep 30; done &


命令行形式指定计划任务
# crontab -e 《--谁指定任务,用谁的身份执行
30 20 * * * /sbin/init 0 <---不需要表明执行者

# crontab -e -u tom 管理员可以编辑别人的任务

# crontab -l  默认查看自己的任务

# crontab -l -u tom

# crontab -r -u tom  管理员可以删除某个用户的所有计划任务


指定的任务保存在哪里?
/var/spool/cron/用户名文件 《--可以编辑该文件实现计划任务的更改。



cron的访问控制
    /etc/cron.allow
    /etc/cron.deny


特点:
    如果指定的时间任务过期了,由于某种原因该任务无法在指定时间点执行,那么该任务就会过期,不会补回来。
        但是,如果基于天,月,周作为时间间隔的任务,可以使用anacron来发现任务没按时完成,然后会补回来。


3、anacron

# vim /etc/anacrontab

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

任务的时间间隔 延迟执行时间
1               65    cron.daily     run-parts /etc/cron.daily
7           70     cron.weekly    run-parts /etc/cron.weekly
30          75     cron.monthly   run-parts /etc/cron.monthly


任务的时间间隔: 这些任务原本在crond中定义的,执行的时间周期
延迟执行时间: 当anacron发现这些任务没有在指定时间内执行就会延迟多少个分钟执行

原理:
    判断/var/spool/anacron/文件里的时间
    以天计划任务为例子
# cat /var/spool/anacron/cron.daily
20110529 《--说明20110829那天的任务已经顺利被anacron或者被crond已经执行了。
    如果里面的日期比现在日期要早,说明今天的任务还没完成。

要确保crond任务不会错误执行,确保anacron开机自动启动




练习:
    以脚本的形式指定一个计划任务,任务内容:

1、挂载10.1.1.22:/share/pub


2、在挂载之后目录上,把时间追加到该目录下的一个文件
文件以IP地址命令, 如: 10.1.1.88.log
    
3、卸载
    umount ...

    任务要求每3分钟执行一次。

shell>  /root/mount.sh
#!/bin/bash
mount 10.1.1.22:/share/pub  /mnt
echo `date`  >> /mnt/10.1.1.22.log
umount /mnt

shell> crontab -e
*/3 * * * * /root/mount.sh

================================

日志管理
    保存各种日志的目录/var/log
    /var/log/messages 各种日志几乎都会在这留下
    /var/log/btmp
    /var/log/wtmp
    /var/log/lastlog
    /var/log/secure  <---安全:登录成功,登录失败,远程登录,授权失败,成功等    
    /var/log/xferlog  vsftpd的日志
    /var/log/boot.log  系统启动的一些报错信息
    /var/log/faillog  记录那些用户登录失败了多少次
    /var/log/maillog  邮件日志
    /var/log/audit/audit.log  审计日志

日志文件除了是程序本生自动书写到日志文件之外,很多程序都喜欢把日志信息己交给syslog服务来处理。
    对应软件包: sysklogd

    可以用于替换syslog的日志服务: syslog-ng


syslog的配置文件
    /etc/syslog.conf  <--决定日志各种类型的日志如何记录
    /etc/sysconfig/syslog <--syslog启动配置。


日志设备《--用于接受不同类型的日志
auth        跟验证相关的日志
authpriv    授权等日志
cron        cron计划任务的日志
daemon        xinetd服务产生的日志
kern        内核输出的日志
lpr        打印服务输出的日志
mail        邮件服务产生的日志
mark        用于产生时间戳
news        新闻组服务产生的日志
security  (same  as auth)
syslog        syslog自身产生的日志    
user        用户程序的产生的日志
uucp        uucp服务产生的日志
local0 ~ local7    自定义日志设备

日志级别,级别最低,记录的内容就越多
debug    最低,程序所有的日志输出都记录
info    最常用的级别
notice    值得注意的事件
warning    预警事件,一般如果不采取措施,将会面临更严重的错误
err    错误事件,这样错误会影响某个子功能正常使用
crit    严重错误,这样错误会影响到整个应用
alert    非常严重错误
emerg    最高,最严重错误,直接导致系统崩溃,不能用
none    啥都不记录


日志输入的设定
    设备.级别    动作
        把该设备的该级别以及该级别以上级别的日志都记录
        auth.info 他会记录info级别~emerg级别的日志


    设备.=级别    动作
        把该设备的该级别的日志都记录,别的级别都不记录
    设备.!级别  除了该级别的日志,其他都输出


*.info;mail.none;authpriv.none;cron.none                /var/log/messages
    除了mail,authpriv,cron以外,其他所有设备的info级别包括以上级别的日志都记录到messages

authpriv.*                                              /var/log/secure

*.emerg                                                 *
    把所有设备的emerg都输出到所有登录的用户的终端上


local0.*        root <---所有root登录的终端都受到该设备的日志
local1.info        tom,bean
local2.debug        /dev/tty1
*.info            @log.upl.com  
    <---把日志发送给主机名为log.upl.com的服务器
        避免域名解析失败,强烈要求绑定到/etc/hosts


例子1:自定义sshd服务的日志输出到某个日志文件中

shell> vim /etc/ssh/sshd_config
#SyslogFacility AUTHPRIV 《--注释原来的
SyslogFacility local5


# vim /etc/syslog.conf
local5.*                /var/log/sshd.log


# service syslog restart
# service sshd restart





例子2:实现远程日志


1、配置日志服务器,让它支持接受远程发送过来的日志
    该日志服务器的主机名字是dev.upl.com 10.1.1.22
# vim /etc/sysconfig/syslog
SYSLOGD_OPTIONS="-m 0 -r"


# service syslog restart

2、配置需要把日志发送到日志服务器的那个客户服务器
    该客户机: 10.1.1.1
# vim /etc/hosts
10.1.1.22       dev.upl.com

# vim /etc/syslog.conf
*.*             @dev.upl.com  《--日志发送到指定服务器
    

# service syslog restart

===============================================
日志轮换
    工具logrote

    配置文件/etc/logroute.conf


/var/log/wtmp {
    monthly    <---轮换的时间间隔,还支持daily,weekly,yearly
    minsize 1M  <---轮换的时候日志必须达到1M的尺寸
    create 0664 root utmp 《--有些日志对权限,用户身份很敏感
    rotate 1
}


size 1M  <---就算轮换的时间还没到,但日志已经超过了1M,依然轮换。与时间周期参数不兼容



例子2:实现对/var/log/btmp进行轮换


/var/log/btmp {
    size 1M
    create 0600 root utmp
    rotate 3
}

为了看效果,马上让logrotate去读取配置文件,检查是否有日志满足轮换。
# logrotate  /etc/logrotate.conf <--检查,满足条件才轮换

# logrotate  -f /etc/logrotate.conf <---强制轮换

====================================================================


练习:
    虚拟机器,网络引导安装,安装指令 upl

    完沉安装后,引导系统,修复所有你发现的错误,让系统支持nfs,yum,修复网络


阅读(550) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~