QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1286|回复: 7

很急的问题,谢谢

[复制链接]
发表于 2002-12-24 02:31:57 | 显示全部楼层 |阅读模式
请问哪位大侠可以帮我解决,
我知道可以使用crontab来解决,但关键是crontab的命令行。
对这些命令行该如何写没有思路呀
1。每周日凌晨2:00做磁盘检查,清除log文件。
2。每天凌晨3:00检查各目录中是否存在core文件,有即删除
3。每小时一次,对域名服务进程named运行状况做例行检查,若发现named没有运行,重新启动它。
发表于 2002-12-24 10:08:47 | 显示全部楼层

crontab命令简介

crontab命令简介
本文出自: 作者: (2001-09-25 15:00:00)
简介  
crontab-操作每个用户的守护程序和该执行的时间表。  

部分参数说明  
crontab file [-u user]-用指定的文件替代目前的crontab。  
crontab-[-u user]-用标准输入替代目前的crontab.  
crontab-1[user]-列出用户目前的crontab.  
crontab-e[user]-编辑用户目前的crontab.  
crontab-d[user]-删除用户目前的crontab.  
crontab-c dir- 指定crontab的目录。  
crontab文件的格式:M H D m d cmd.  
M: 分钟(0-59)。  
H:小时(0-23)。  
D:天(1-31)。  
m: 月(1-12)。  
d: 一星期内的天(0~6,0为星期天)。  
cmd要运行的程序,程序被送入sh执行,这个shell只有USER,HOME,SHELL这三个环境变量。  
下面是一个例子文件:  
#MIN HOUR DAY MONTH DAYOFWEEK COMMAND  
#每天早上6点  
106* * * date  

#每两个小时  
0*/2* * * date  

#晚上11点到早上8点之间每两个小时,早上部点  
0 23-7/2,8* * * date  

#每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点  
0 11 4* mon-wed date  

#1月份日早上4点  
0 4 1 jan* date  
范例  
lark:~>crontab-1 列出用户目前的crontab.  
#MIN HOUR DAY MONTH DAYOFWEEK COMMAND  
10 6* * * date  
0*/2* * * date  
0 23-7/2,8 * * * date
回复

使用道具 举报

发表于 2002-12-24 11:53:29 | 显示全部楼层

Re: 很急的问题,谢谢

[quote:e4d7be3565="ancai"]请问哪位大侠可以帮我解决,
我知道可以使用crontab来解决,但关键是crontab的命令行。
对这些命令行该如何写没有思路呀
1。每周日凌晨2:00做磁盘检查,清除log文件。
2。每天凌晨3:00检查各目录中是否存在core文件,有即删除
3。每小时一次,对域名服务进程named运行状况做例行检查,若发现named没有运行,重新启动它。[/quote]
假如你对SHELL编程比较精通的话,那你只要写个SHELL文件就行了,然后通过crond来自动执行。假如说
有“1。每周日凌晨2:00做磁盘检查,清除log文件”这个功能的SHELL:0200.sh,然后你只要在/etc/crontab中加入:
00 02 * * * root /dir/0200.sh
就行了!其他也一样,不过我对SHELL编程还不是很熟悉,正在努力中,希望你到公社的编程版看看,有没有可以帮你的,当然如果你在其他地方找到了这个程序,也希望你能共享出来大家一起学习,你看如何?
回复

使用道具 举报

发表于 2002-12-24 15:54:51 | 显示全部楼层

Re: 很急的问题,谢谢

[quote:3f8e8c5d88="ancai"]
1。每周日凌晨2:00做磁盘检查,清除log文件。
2。每天凌晨3:00检查各目录中是否存在core文件,有即删除
3。每小时一次,对域名服务进程named运行状况做例行检查,若发现named没有运行,重新启动它。[/quote]

1. 附件中的log_clear 是我用来清除/var/log下的日志文件的. 只能深入到第二层目录. 对于文件大小>2000000byte的文件 直接清空...
2. 这个问题你得定一个目录或一范围的目录. 然后就可以参照log_clean来写相应功能的脚本了.
3. 简单的办法就是用named的启动脚本 用reload 来实现, 这个办法对服务没什么影响. 如果你要自己做,就写脚本吧.检查named中设定的pid文件的进程号...


这些脚本的用法: 把它们放一目录下,加上可执行属性.在/etc/crontab里添加相应的语句, 重启cron进程.OK.
不要问脚本里为什么这样做,因为你问这个问题时就没打算要先学会它. 你解决了当前问题再慢慢学shell吧...
-----------------
附件: log_clear
回复

使用道具 举报

 楼主| 发表于 2002-12-25 17:06:31 | 显示全部楼层
谢谢大侠“黑企鹅”和“bixuan”的热心帮助,看到你们的回帖心里感到热乎乎的。因为是刚刚接触linux,其实也是给一个因为工作繁忙耽误了课程的朋友帮忙,让我也认识到了linux这个博大精深的新地方。刚刚下载了shell的资料准备看,成为将来linux中高手。却接到了朋友的电话绝望的说明天就要交,而我根本没有什么把握可以在一夜明白shell给他做出来。大侠“黑企鹅, 很感谢你的附件log_clear,但我没有时间研究懂也就不能再用它来修改去满足第二个问题了。我在这里有个很惭愧的请求,能否请你帮助我完成第二个问题呢?实在是时间不够了,也怕耽误朋友的事情呀。谢谢了!
回复

使用道具 举报

发表于 2002-12-25 18:37:03 | 显示全部楼层

ok. the third problem.

2. 这个问题你得定一个目录或一范围的目录.

OK. 对core我只是知道一点点, 只知道它会被放在程序运行的当前目录下.所以对于你的要求,就有点无所是从...如果要搜索整个硬盘,那显然是没必要的...我们就假定是搜索
/var 吧. /usr,/etc,/proc都不会拿来放core吧. 个人觉得这个要求是不必要的..无用的工作..
[code:1]
#!/bin/bash

del `find /var -iname *core*`
[/code:1]
可以命令 del....直接放在crontab里吧.
这是一个不安全的脚本...所有/var下的文件名包含core的文件将被删
回复

使用道具 举报

 楼主| 发表于 2002-12-25 21:56:12 | 显示全部楼层
谢谢了,其实不管结果怎么样,我都要谢谢你了。很紧张你是否可以帮助我这个无理的请求。这里的世界是那样有人情味? :-) 我想我最好的感谢就应该是努力学习linux,然后在以后去帮助别人,帮助它们是么 以后还要多请教呀!
回复

使用道具 举报

 楼主| 发表于 2002-12-25 23:36:09 | 显示全部楼层
你好,这里是我根据你的提示,自己做的答案,请帮我检查一下吧。错误肯定不少,那请帮我指出怎么修改好么?谢谢了!





题二、1。每周日凌晨2:00做磁盘检查,清除log文件。
2。每天凌晨3:00检查各目录中是否存在core文件,有即删除
3。每小时一次,对域名服务进程named运行状况做例行检查,若发现named没有运行,重新启动它。
答案:
为1,2,3各写一个脚本,比如叫log_clear.sh,core_clear.sh,startnamed.sh,这3个脚本分别完成任务1,2,3。
Log_clear.sh
#!/bin/bash
LOG_PATH="/var/log"
MAX_SIZE=2000000

cnt=0
for file in  $LOG_PATH/* ; do

        if [ -f $file ]; then
                size=`ls -l $file | awk '{print $5}'`;
                if [ $size -gt $MAX_SIZE ]; then
                        echo -n  "$file...$size Bytes"
                        echo -n "...do rm"
                        rm -rf $file
                        touch $file
                        #echo "" > $file
                        echo $'\a'
                        cnt=$[$cnt+1]
        #                ls -l $file
        #        else
                        echo " "
                fi
        else
        if [ -d $file ]; then
        for dfile in $file/* ; do

                if [ -f $dfile ]; then
                        size=`ls -l $dfile | awk '{print $5}'`
                        if [ $size -gt $MAX_SIZE ]; then
                                echo -n  "$dfile...$size Bytes"
                                echo -n "...do rm"
                                rm -rf $dfile
                                touch $file
                                #echo "" > $file
                                echo $'\a'
                                cnt=$[$cnt+1]
        #                        ls -l $file
        #                else
                                echo " "
                        fi
                fi
                done
        fi
        fi
done
echo "Deleted total:  $cnt files"

Log_clear.sh
#!/bin/bash

find /var/tmp -name *.log-print -exec rm -rf {} \;
find /var/spool -name *.log-print -exec rm -rf {} \;
find /var/run -name *.log-print -exec rm -rf {} \;
find /var/log -name *.log-print -exec rm -rf {} \;
find /var/lib -name *.log-print -exec rm -rf {} \;
find /etc -name *.log-print -exec rm -rf {} \;
find /dev -name *.log-print -exec rm -rf {} \;
find /lib -name *.log-print -exec rm -rf {} \;
find /boot -name *.log-print -exec rm -rf {} \;
find /usr/tmp -name *.log-print -exec rm -rf {} \;
find /usr/man -name *.log-print -exec rm -rf {} \;
find /usr/lib -name *.log-print -exec rm -rf {} \;
find /usr/bin -name *.log-print -exec rm -rf {} \;
find /proc -name *.log-print -exec rm -rf {} \;
find /bin -name *.log-print -exec rm -rf {} \;
find /home/linus -name *.log-print -exec rm -rf {} \;
find /home/liw -name *.log-print -exec rm -rf {} \;
find /home/ftp -name *.log-print -exec rm -rf {}



core_clear.sh

#!/bin/bash

find /var/tmp -name *core*-print -exec rm -rf {} \;
find /var/spool -name *core*-print -exec rm -rf {} \;
find /var/run -name *core*-print -exec rm -rf {} \;
find /var/log -name *core*-print -exec rm -rf {} \;
find /var/lib -name *core*-print -exec rm -rf {} \;
find /etc -name *core*-print -exec rm -rf {} \;
find /dev -name *core*-print -exec rm -rf {} \;
find /lib -name *core*-print -exec rm -rf {} \;
find /boot -name *core*-print -exec rm -rf {} \;
find /usr/tmp -name *core*-print -exec rm -rf {} \;
find /usr/man -name *core*-print -exec rm -rf {} \;
find /usr/lib -name *core*-print -exec rm -rf {} \;
find /usr/bin -name *core*-print -exec rm -rf {} \;
find /proc -name *core*-print -exec rm -rf {} \;
find /bin -name *core*-print -exec rm -rf {} \;
find /home/linus -name *core*-print -exec rm -rf {} \;
find /home/liw -name *core*-print -exec rm -rf {} \;
find /home/ftp -name *core*-print -exec rm -rf {}





core_clear.sh
del `find /var -iname *core*`

startnamed.sh

以上三个脚本完成以后,将它们保存于目录/usr
执行下列命令
/etc/cat planwork
00 02 * * sun root //usr/log_clear
00 03 *** root/usr/core_clear
00 */1 *** root /usr/ startnamed
/etc/crontab planwork
/etc/crontab -l

此任务完成
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-4-20 16:15 , Processed in 0.144603 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表