Linux 基础学习篇 - Red Hat Linux 6.1

Linux 例行性命令的创建 - for Red Hat Linux 6.1

大概在 1999~2000 年期间为了防止自己忘记所作的学习心得纪录!

最近更新时间: 2001/11/04

1999 年初次接触 Unix 系统,1999 年底接触 Red Hat 6.1,而在 2000 开始撰写一些心得文章,于是有了底下这些文本的产生。 这些文本对大家来说,可能没什么,但是对鸟哥来说,这是相当珍贵的!所有鸟站的数据起源,都是从这些文本开始的! 慢慢再将许多的指令分门别类的处理进去!网站的数据汇整,真的相当花费时间啊~

不过对于学习者来说,这些数据真的不要再读了!因为实在太老旧... 建议您前往本站查找最新版本的 Linux distribution 文章来阅读,比较不会浪费时间。最新文章请前往鸟站首页查阅啰!

前言

假如你每一天早上 8:00 钟要服务器连接上音响,并启动音乐来唤你起床;而中午 12:00 希望 Linux 可以发一封信到你的邮件信箱,提醒你可以去吃午餐了;另外,在每年的你爱人的生日的前一天,先发封信提醒你,以免忘记这么重要的一天.....要怎样达到这个目的呢?其实是很简单的,只要使用 crontab 就可以啦!
其实,Linux 本身在背景下的工作可是很多的,尤其是网络开放的情况下,创建与取消连接、MySQL 数据库的即时更新、以及一些例行的系统指令,例如释放内存的工作等等。由于例行的工作非常的多,实在不可能每天都要管理员来手动输入吧!因此我们就需要了解一下 Linux 是如何创建例行性工作的!
crontab 基本上有两种创建例行性命令的方式,一种是针对所有用户,可以借由 crontab -e 的指令来下达工作调度;另一种是针对系统管理员,你可以直接借由修改 /etc/crontab 这一个文本档,来直接调度!那 crontab 的主要命令要如何运行呢?待鸟哥慢慢道来!

使用 crontab 指令

创建个人用户的例行性命令:
假如你需要在每天的正午 12:00 发一封信给你自己,而且信的内容已经写好了,那要怎样作呢?而且,另一个假设是,你在 Linux Server 中的权限仅止于一般用户,并不是 root (管理员)身份,那要怎样设置你的例行性命令呢?哈哈!那就使用 crontab 这个指令吧!你只要运行 crontab -e 就可以进入 vi 的编辑画面来编辑你的例行性命令说!
 
[vbird@tsai vbird]# crontab -e

0 12 * * * mail vbird@tsai.adsldns.org < /home/vbird/test.txt

在上面的例子中,输入 crontab -e 时,会出现一个 vi 画面,然后你在 vi 画面中输入上面的一行字,之后按 :wq 保存后离开!即可完成编辑!容易吧!那上面那一行字代表什么意义呢?你可以看到,在真正运行命令之前(就是 mail vbird@tsai.adsldns.org < /home/vbird/test.txt )总共有五个数字,这五个数字分别代表:
分(0-59)
小时(0-23)
日期(1-31)
月份(1-12)
周(0-6)
数字代表的意义 分钟 小时 日期 月份
范围 0-59 0-23 1-31 1-12 0-6 (0为星期天)
另外,如果是『 *  』的时候,代表所有数字都适用的意思。所以,你就可以知道我上面那一行写的意义为何了!那就是不论何月、何日、星期几的 12 点 0 分时,运行 mail vbird@tsai.adsldns.org < /home/vbird/test.txt 这个命令!还不了解?没关系,我们这里作几个例子!
  • 例题一:假如你的女朋友生日是 5 月 2 日,你想要在 5 月 1 日的 23:59 发一封信给他,这封信的内容已经写在 /home/vbird/lover.txt 中了那你要如何编辑呢?呵呵,使用:
  • [vbird@tsai vbird]# crontab -e

    59 23 1 5 * mail pigpp@tsai.adsldns.org < /home/vbird/lover.txt

    就可以啰!那样的话,每年 pigpp 都会收到你的这封信喔!(当然啰,信的内容就要每年变一变啦!)
  • 例题二:假设你每隔五分钟就要去 check 你的一个名为 test.sh 这个批量档一次!要如何写呢?
  • [vbird@tsai vbird]# crontab -e

    */5 * * * * /home/vbird/test.sh

    就可以啦!有两件事要注意一下:(1) 指令的路径最好是下达绝对路径,这样比较不会找不到运行的文件喔!;(2) 第一个数字 */5 表示『每五分钟运行一次』的意思!
  • 例题三:假如你每个礼拜五下午 4:30 要告诉朋友星期六的约会不要忘记,如何下达指令?
  • [vbird@tsai vbird]# crontab -e

    30 16 * * 5 mail frend@test.domain.name < /home/vbird/frend.txt

    就成功啦!这样了不了呀!
察看个人用户的例行性命令:
如果你一直使用 crontab 这个方法来下达例行性命令的话,有可能有一些指令你会忘记了!那怎办呢?没关系,只要下达:
crontab -l (注: -l 是 L 的小写喔!)
就可以知道你曾经下达的 crontab 的命令啰!
删除例行性命令:
这个更简单,使用 crontab -r 就删除了!

修改 /etc/crontab 文件

    如果你是系统管理员的话,那么是否还是需要以 crontab -e 来管理你的例行性命令呢?当然不需要,你只要编辑 /etc/crontab 这个文件就可以啦!有一点需要特别注意喔!那就是 crontab -e 这个 crontab 其实是 /usr/bin/crontab 这个运行档,但是 /etc/crontab 可是一个『纯文本档』喔!你可以 root 的身份编辑一下这个文件哩!
     
    [root@tsai /root]# vi /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

    看到这个文件的内容你大概就了解了吧!呵呵,没错!这个文件与将刚刚我们下达 crontab -e 的内容几乎完全一模一样!只是有几个地方不太相同:
    • MAILTO=root:是说,当 /etc/crontab 这个文件中的例行性命令发生错误时,会将错误消息或者是屏幕显示的消息传给谁?由于 root 并无法在用户端中收信,因此,我通常都将这个 e-mail 改成自己的帐号,好让我随时了解系统的状况!
    • 01 * * * * root run-parts /etc/cron.hourly:在 #run-parts 这一行以后的命令,我们可以发现,五个数字后面接的是 root 喔!没错,这一行代表的是『运行的层级为 root 身份』当然啰,你也可以将这一行改写成其他的身份哩!而 run-parts 代表后面接的 /etc/cron.hourly 是『一个目录内(/etc/cron.hourly)的所有可运行档』,这也就是说,个小时的 01 分,系统会以 root 层级的用户去 /etc/cron.hourly 这个目录下运行所有可以运行的文件!后面的三行也都是类似的意思!你可以到 /etc/ 底下去看看,系统本来就缺省了这四个目录了!你可以将每天需要运行的命令直接写到 /etc/cron.daily 即可,还不需要使用到 crontab -e 的程序呢!方便吧!
    好!你现在大概了解了这一个咚咚吧!OK!假设你现在要作一个目录,让系统可以每 2 分钟去运行这个目录下的所有可以运行的文件,你可以写下如下的这一行在 /etc/crontab 中:
      */2 * * * * root run-parts /etc/cron.min
    当然啰, /etc/cron.min 这个目录是需要存在的喔!那如果我需要运行的是一个『程序』而已,不需要用到一个目录呢?该如何是好?例如在侦测网络流量时,我们希望每五分钟侦测分析一次,可以这样写:
      */5 * * * * root /usr/local/mrtg-2/bin/mrtg /usr/local/apache/htdocs/mrtg/net/mrtg.cfg
    没有了 run-parts 就是代表『一个文件』的意思啦!
    如何!?创建例行性命令很简单吧!如果你是系统管理员的话,直接修改 /etc/crontab 这个文件即可喔!又便利,又方便管理呢!
2002/01/01以来统计人数
其他链接
环境工程模式篇
鸟园讨论区
鸟哥旧站

今日 人数统计
昨日 人数统计
本月 人数统计
上月 人数统计