一、计划任务
定时、周期性地完成的任务。
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,修复网络
阅读(770) | 评论(0) | 转发(0) |