计划任务
at 一次性
一次性任务设置:
at或batch命令
at和batch都依赖于系统的atd这个系统服务
RHEL5默认是启动了的,如果没启动,可以用以下命令启动
at和batch的区别是什么??
最大区别就是batch执行时会根据系统的工作负载大小选择到底该不该执行,而at没有这个考虑。
设置时间
查看显示日期:
at ---》ctrl+d 退出
at -c
atrm;at -d 都是取消一个任务
at -l ;atq 都是查询当前任务
===
如果设置了at任务,后悔了怎么办???
可以at -d 【计划任务号】取消
常用的时间点:
now : 现在
noon :中午12点正
teatime:下午16:00
======
怎么限制制定计划的用户??
/etc/at.deny 黑名单
/etc/at.allow 白名单
/var/log/cron 日志文件
/var/spool/at 存放at任务的地方
/var/spool/cron 存放at任务的地方
/etc/crontab cron服务的配置文件
crontab--》cron服务--》守护进程crond
crontab
crontab -l [-u wukong]
crontab -e
crontab -r
php
perl
python
5.5的旧版本


crontab -e
内容命令尽量用绝对路径,因为PATH里面提供的只有那几个,写别的可能找不到
具体命令放在脚本里实现
尽可能使用绝对路径
命令和脚本的路径尽量使用绝对路径,防止shell找不到命令
每天执行的脚本可以存放做/etc/cron.daily目录下
怎么查看计划任务是否执行???
计划任务是否执行,可以查看日志/var/log/cron
crontab -e 编辑任务之后,在哪里能找到呢??
/var/spool/cron/
备份的计划任务不要在系统非常繁忙的时间进行,在凌晨比较好,同时备份数据的时候系统会开销会比较大
=====
anacron服务
弥补cron在系统关机后不能执行计划任务的问题(收拾残局)
不能替代cron
按天、周或月为单位去检查系统未进行的cron任务
/var/spool/anacron
服务名称:/etc/init.d/anacrond
开机时自动运行,然后将未执行的计划任务执行一遍后,anacron 就会自动停止
========
练习:
1.rsyslog+loganalyzer部署日志集中管理服务器
2.crontab+shell脚本
要求每天晚上的2点30备份/var/log目录到/log_bak,
1.开始备份的时候提醒信息如下:
log directory is now backuping ...
2.将整个/var/log目录备份到/log_bak目录下的文件名的格式如下:
log_20130319-334455.tar.gz,要求中间日期是当天备份的日期精确到分钟
3.同时只保留最近7个备份文件,超过7个的备份文件要求移动到/bak目录下
4.如果备份失败,给予提醒log backup faild
备份成功也给予提醒log backup ok
1.注释,使用那个shell
2.先定义变量(那些变量需要定义,自己看着办)
3.输出的提醒文字
4.最后去完善脚本加判断
crontab -e
30 2 * * * /bin/bash /log_back1.sh
[root@teacher bak_sh]# find /root -mtime -7 查找7天之内的,以当前日期为参照
[root@teacher bak_sh]# find /root -mtime +7 查找7天之前的
[root@teacher bak_sh]# find /root -mtime +7 -name vnc.sh -exec rm -rf {} ;
同时只保留最近7个备份文件,超过7个的备份文件要求移动到/bak目录下
条件语句格式:
if [条件];then
command
else
command
fi
[root@teacher bak_sh]# cat bak_log.sh
#!/bin/bash
#write by feng 2013-3-19
#mailto 695811769@qq.com
date=`date +%Y%m%d-%H%M%S`
echo "log directory is now backuping ..."
/bin/tar czvf /log_bak/log_$date.tar.gz /var/log/ &>/dev/null
if [ $? == 0 ];then
echo log backup ok
else
echo log backup faild
fi
find /log_bak -mtime +7 -exec rm -rf {} ;
[root@teacher bak_sh]#
[root@teacher bak_sh]# ./bak_log.sh
log directory is now backuping ...
log backup ok
[root@teacher bak_sh]#
[root@teacher bak_sh]#
[root@teacher bak_sh]# crontab -l
50 7 * * * /etc/init.d/sshd start
50 22 * * * /etc/init.d/sshd stop
0 12 */5 * * /bin/rm -rf /var/ft/pub/*
30 7 * * 6 /etc/init.d/httpd restart
30 17 * * 1,3,5 bash /bak_sh/bak_httpd.sh
30 23 * * * bash /bak_sh/bak_log.sh
[root@teacher bak_sh]#
[root@teacher bak_sh]# tail -f /var/log/cron



at 一次性
crontab 周期性 *

一次性任务设置:
at或batch命令
at和batch都依赖于系统的atd这个系统服务
RHEL5默认是启动了的,如果没启动,可以用以下命令启动
at和batch的区别是什么??
最大区别就是batch执行时会根据系统的工作负载大小选择到底该不该执行,而at没有这个考虑。
[root@host log_bak]# chkconfig atd on===
[root@host log_bak]# chkconfig --list|grep atd
atd 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
[root@teacher ruijie]# service atd restart
Stopping atd: [ OK ]
Starting atd: [ OK ]
[root@teacher ruijie]# service crond restart
Stopping crond: [ OK ]
Starting crond: [ OK ]
[root@teacher ruijie]#
[root@teacher init.d]# /etc/init.d/atd restart
Stopping atd: [ OK ]
Starting atd: [ OK ]
[root@teacher init.d]# /etc/init.d/crond restart
Stopping crond: [ OK ]
Starting crond: [ OK ]
[root@teacher init.d]#
[root@uhza006703 init.d]# cd /etc/init.d/
[root@uhza006703 init.d]# uname -a 内核版本
Linux uhza006703 2.6.18-243.el5 #1 SMP Mon Feb 7 18:47:27 EST 2011 x86_64 x86_64 x86_64 GNU/Linux
[root@uhza006703 init.d]# cat /etc/issue 系统版本
Red Hat Enterprise Linux Server release 5.4 (Tikanga)
Kernel on an m
[root@uhza006703 init.d]#
设置时间
[root@teacher init.d]# date -s "2013/7/26 09:48"
查看显示日期:
[root@teacher init.d]# date 查看当前日期
Tue Mar 19 15:20:28 EDT 2013
[root@teacher init.d]# date +%F
2013-03-19
[root@teacher init.d]# date +%Y%m%d
20130319
[root@teacher init.d]# date +%Y%m%d-%M
20130319-21
[root@teacher init.d]# man date 查看用法
[root@teacher init.d]# date +%F%T
2013-07-2609:51:16
[root@teacher init.d]# date +%F-%T
2013-07-26-09:51:20
[root@teacher init.d]# date +%F_%T
2013-07-26_09:51:52
[root@teacher init.d]#
at ---》ctrl+d 退出
at -c
atrm;at -d 都是取消一个任务
at -l ;atq 都是查询当前任务
===
[root@host log_bak]# at
Garbled time --》错乱的时间
[root@host log_bak]# at 9:10 后面要接时间
at> ls /tan_shell
at> <EOT>
job 5 at 2013-07-24 09:10
[root@host log_bak]#
如果设置了at任务,后悔了怎么办???
可以at -d 【计划任务号】取消
[root@host log_bak]# at -l
5 2013-07-24 09:10 a root
4 2013-07-24 09:10 a root
1 2013-07-24 09:55 a root
6 2013-07-24 09:10 a root
[root@host log_bak]# at -d 5
[root@host log_bak]# at -l
4 2013-07-24 09:10 a root
1 2013-07-24 09:55 a root
6 2013-07-24 09:10 a root
常用的时间点:
now : 现在
noon :中午12点正
teatime:下午16:00
五分钟后 mkdir /tan
[root@host log_bak]# at now+5 minutes
at> mkdir /tan
at> <EOT>
job 7 at 2013-07-23 20:23
[root@host log_bak]# at -l
1 2013-07-24 09:55 a root
6 2013-07-24 09:10 a root
7 2013-07-23 20:23 a root
[root@host log_bak]#
[root@host log_bak]# at -c 7 查询at任务执行的详细过程(必须在前面内容敲完后五分钟内做完这个操作)
======
[root@teacher /]# at now +10minutes 10分钟后做事情======
at> wall hello,xiaolong
at> <EOT>
job 8 at 2013-07-26 10:11
[root@teacher /]#
[root@teacher /]# cd /script/
[root@teacher script]# ls
[root@teacher script]# vim test.sh
[root@teacher script]# at now +5minutes -f /script/test.sh # -f file --》 Reads the job from file rather than standard input.
job 10 at 2013-07-26 10:12
[root@teacher script]# atq
9 2013-07-26 10:13 a root
10 2013-07-26 10:12 a root
8 2013-07-26 10:11 a root
[root@teacher script]# cat /script/test.sh
#!/bin/bash ---》说明该脚本使用bash这个shell程序去执行
mkdir /luxiang
cd /luxiang
touch lirong zhousuo chengzhou lixiang
[root@teacher script]#
[root@host log]# w
21:06:11 up 12:33, 3 users, load average: 0.39, 0.35, 0.26
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 :0 08:34 4:33m 18:09 18:09 /usr/bin/Xorg :0 -n
root pts/2 :0.0 10:45 52.00s 4:00 0.07s bash
root pts/4 :0.0 15:21 0.00s 0.25s 0.00s w
[root@host log]# vim /tan_shell/hello.sh
[root@host log]# cat /tan_shell/hello.sh
#!/bin/bash
#writing by tan 2013-07-23
#this is a "at test"
echo hello >>/dev/pts/4
[root@host log]# at now+1 minutes -f /tan_shell/hello.sh
job 9 at 2013-07-23 21:10
[root@host log]# hello
=====
[root@teacher at]# vim a00003015acff6
[root@teacher at]# pwd
/var/spool/at 存放at任务的地方
[root@teacher at]# ls
a00003015acff6 spool
[root@teacher at]#
怎么限制制定计划的用户??
/etc/at.deny 黑名单
/etc/at.allow 白名单
/var/log/cron 日志文件
/var/spool/at 存放at任务的地方
/var/spool/cron 存放at任务的地方
/etc/crontab cron服务的配置文件
crontab--》cron服务--》守护进程crond
crontab
crontab -l [-u wukong]
crontab -e
crontab -r
php
perl
python
cron

vim /etc/crontab (4.5的版本)
5.5的旧版本
crontab -e
内容命令尽量用绝对路径,因为PATH里面提供的只有那几个,写别的可能找不到
[root@host 桌面]# which rm
alias rm='rm -i'
/bin/rm
[root@host 桌面]#
具体命令放在脚本里实现
[root@host 桌面]# crontab -e -u jerry 不用su - jerry去该用户下编辑,直接这样也可以
[root@host 桌面]# which cp
alias cp='cp -i' -i---》interact 交互的,不接就不会每次提醒,所以使用绝对路径/bin/cp(不提醒)
/bin/cp
[root@host 桌面]#
尽可能使用绝对路径
#crontab -e
50 7 * * * /etc/init.d/sshd start
50 22 * * * /etc/init.d/sshd stop
0 12 */5 * * /bin/rm -rf /var/ft/pub/*
30 7 * * 6 /etc/init.d/httpd restart
30 17 * * 1,3,5 bash /bak_sh/bak_httpd.sh
命令和脚本的路径尽量使用绝对路径,防止shell找不到命令
[root@teacher bak_sh]# cat httpd_bak.sh===
Date=`date +%Y%m%d` #定义一个变量Date
/bin/tar czf /bak/httpd.$Date.tar.gz /etc/httpd #将/etc/httpd目录备份到/bak目录下叫httpd.$Date.tar.gz文件名
[root@teacher bak_sh]#
[root@teacher bak_sh]# crontab -e -u jerry jerry用户的crontab
no crontab for jerry - using an empty one
crontab: no changes made to crontab
[root@teacher bak_sh]# cat /etc/passwd|grep jerry
jerry:x:501:501::/home/jerry:/bin/bash
[root@teacher bak_sh]# userdel -r jerry
[root@teacher bak_sh]# cat /etc/passwd|grep jerry
[root@teacher bak_sh]# crontab -e -u jerry
crontab: user `jerry' unknown
[root@teacher bak_sh]#
====
[root@teacher cron]# which cp
alias cp='cp -i'
/bin/cp
[root@teacher cron]# /bin/cp /etc/passwd /bak/pwd.txt
使用/bin/cp 不接-i 覆盖原来的文件,不给予提醒
[root@teacher cron]# /bin/cp /etc/passwd /bak/pwd.txt
[root@teacher cron]#
====
[root@teacher cron]# crontab -l 查看
50 7 * * * /etc/init.d/sshd start
50 22 * * * /etc/init.d/sshd stop
0 12 */5 * * /bin/rm -rf /var/ft/pub/*
30 7 * * 6 /etc/init.d/httpd restart
30 17 * * 1,3,5 bash /bak_sh/bak_httpd.sh
[root@teacher cron]# crontab -e 进入删除不想使用的计划任务,或者前面加#号注释
每天执行的脚本可以存放做/etc/cron.daily目录下
[root@teacher bak_sh]# cd /etc/cron.daily/
[root@teacher cron.daily]# ls
cups logrotate mlocate.cron readahead.cron tmpwatch
google-chrome makewhatis.cron prelink rhsmd
[root@teacher cron.daily]# cp /bak_sh/httpd_bak.sh ./
[root@teacher cron.daily]# ls
cups httpd_bak.sh makewhatis.cron prelink rhsmd
google-chrome logrotate mlocate.cron readahead.cron tmpwatch
[root@teacher cron.daily]# chmod +x httpd_bak.sh
[root@teacher cron.daily]# ls
cups httpd_bak.sh makewhatis.cron prelink rhsmd
google-chrome logrotate mlocate.cron readahead.cron tmpwatch
[root@teacher cron.daily]#
怎么查看计划任务是否执行???
计划任务是否执行,可以查看日志/var/log/cron
crontab -e 编辑任务之后,在哪里能找到呢??
/var/spool/cron/
[root@teacher cron.daily]# cd /var/spool/cron/ 计划任务存放的位置,也就是编辑crontab -e的内容
[root@teacher cron]# ls
jerry root
[root@teacher cron]# cat root
50 7 * * * /etc/init.d/sshd start
50 22 * * * /etc/init.d/sshd stop
0 12 */5 * * /bin/rm -rf /var/ft/pub/*
30 7 * * 6 /etc/init.d/httpd restart
30 17 * * 1,3,5 bash /bak_sh/bak_httpd.sh
30 23 * * * bash /bak_log.sh
#30 22 * * * bash /root/script/shutdown.sh
02 0 * * * /usr/sbin/ntpdate 218.75.4.130 ;/sbin/hwclock -w
*/1 * * * * date >>/root/time.txt
#40 23 * * * /sbin/shutdown -h now
40 23 * * * bash /bak_sh/shutdown.sh
[root@teacher cron]# cat jerry
55 23 * * 0 /bin/cp /etc/passwd ~jerry/pwd.txt
[root@teacher cron]# pwd
/var/spool/cron
备份的计划任务不要在系统非常繁忙的时间进行,在凌晨比较好,同时备份数据的时候系统会开销会比较大
=====
anacron服务
弥补cron在系统关机后不能执行计划任务的问题(收拾残局)
不能替代cron
按天、周或月为单位去检查系统未进行的cron任务
/var/spool/anacron
服务名称:/etc/init.d/anacrond
开机时自动运行,然后将未执行的计划任务执行一遍后,anacron 就会自动停止
========
练习:
1.rsyslog+loganalyzer部署日志集中管理服务器
2.crontab+shell脚本
要求每天晚上的2点30备份/var/log目录到/log_bak,
1.开始备份的时候提醒信息如下:
log directory is now backuping ...
2.将整个/var/log目录备份到/log_bak目录下的文件名的格式如下:
log_20130319-334455.tar.gz,要求中间日期是当天备份的日期精确到分钟
3.同时只保留最近7个备份文件,超过7个的备份文件要求移动到/bak目录下
4.如果备份失败,给予提醒log backup faild
备份成功也给予提醒log backup ok
1.注释,使用那个shell
2.先定义变量(那些变量需要定义,自己看着办)
3.输出的提醒文字
4.最后去完善脚本加判断
crontab -e
30 2 * * * /bin/bash /log_back1.sh
[root@teacher bak_sh]# find /root -mtime -7 查找7天之内的,以当前日期为参照
[root@teacher bak_sh]# find /root -mtime +7 查找7天之前的
[root@teacher bak_sh]# find /root -mtime +7 -name vnc.sh -exec rm -rf {} ;
同时只保留最近7个备份文件,超过7个的备份文件要求移动到/bak目录下
条件语句格式:
if [条件];then
command
else
command
fi
[root@teacher bak_sh]# cat bak_log.sh
#!/bin/bash
#write by feng 2013-3-19
#mailto 695811769@qq.com
date=`date +%Y%m%d-%H%M%S`
echo "log directory is now backuping ..."
/bin/tar czvf /log_bak/log_$date.tar.gz /var/log/ &>/dev/null
if [ $? == 0 ];then
echo log backup ok
else
echo log backup faild
fi
find /log_bak -mtime +7 -exec rm -rf {} ;
[root@teacher bak_sh]#
[root@teacher bak_sh]# ./bak_log.sh
log directory is now backuping ...
log backup ok
[root@teacher bak_sh]#
[root@teacher bak_sh]#
[root@teacher bak_sh]# crontab -l
50 7 * * * /etc/init.d/sshd start
50 22 * * * /etc/init.d/sshd stop
0 12 */5 * * /bin/rm -rf /var/ft/pub/*
30 7 * * 6 /etc/init.d/httpd restart
30 17 * * 1,3,5 bash /bak_sh/bak_httpd.sh
30 23 * * * bash /bak_sh/bak_log.sh
[root@teacher bak_sh]#
[root@teacher bak_sh]# tail -f /var/log/cron
计划任务:

