⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crond的实现.txt

📁 Cron的实现 UNIX 下设计编写中小型程序的能力
💻 TXT
字号:
                             CRON 的实现

一、实验目的:
训练在UNIX 下设计编写中小型程序的能力,巩固加深对Unix 环境下文件目录操作、
进程控制、信号等内容的理解。
3
二、实验内容
编程实现cron 工具的功能,具体资料见下一节(背景资料介绍)。
1. 实现cron 命令的功能
2. 实现crontab 命令的功能
三、背景资料介绍:
1.cron 命令:
在很多场合,系统需要重复在指定的时间执行一些命令,比如:某公司每周一自动向员
工报告头一周公司的活动情况;系统每天零点开始做系统数据备份,等等。这时候就需要使
用一个命令来代替人去自动完成任务。Cron 命令就是这样一个命令。通常cron 命令在系统
启动时就由一个shell 脚本自动启动,在后台运行。一般的用户没有运行该命令的权限。
首先cron 命令会搜索/var/spool/cron 目录,寻找以/etc/passwd 文件中的用户名命名的
crontab 文件,被找到的这种文件将载入内存。例如一个用户名为S000 的用户,它所对应的
crontab 文件就应该是/var/spool/cron/S000。也就是说,以该用户命名的crontab 文件存放在
/var/spool/cron 目录下面。
cron 启动以后,它将首先检查是否有用户设置了crontab 文件,如果没有就转入“休眠”
状态,释放系统资源,所以该后台进程占用资源极少。它每分钟“醒”过来一次,查看当前
是否有需要运行的命令。命令执行结束后,任何输出都将作为邮件发送给crontab 的所有者,
或者是/etc/crontab 文件中MAILTO 环境变量中指定的用户。
输入命令man cron 可以查看命令cron 的在线帮助资料。
2.crontab 命令:
上面简单介绍了一些cron 的工作原理,但是cron 命令的执行不需要用户干涉;需要用
户修改的是crontab 中要执行的命令序列,所以下面介绍crontab 命令。
crontab 命令用于安装、删除或者列出用于驱动cron 后台进程的表格。也就是说,用户
把需要执行的命令序列放到crontab 文件中以获得执行。每个用户都可以有自己的crontab
文件。下面就来看看如何创建一个crontab 文件。
在/var/spool/cron 下的crontab 文件不可以直接创建或者直接修改。crontab 文件是通过crontab
命令得到的。现在假设有个用户名为S000,需要创建自己的一个crontab 文件。首先可以使
用任何文本编辑器建立一个新文件,然后向其中写入需要运行的命令和要定期执行的时间。
然后存盘退出。假设该文件为/tmp/test.cron。再后就是使用crontab 命令来安装这个文件,使
之成为该用户的crontab 文件。键入:crontab test.cron 。这样一个crontab 文件就建立好了。
可以使用crontab 命令的用户是有限制的。如果/etc/cron.allow 文件存在,那么只有其中
列出的用户才能使用该命令;如果该文件不存在但cron.deny 文件存在,那么只有未列在该
文件中的用户才能使用crontab 命令;如果两个文件都不存在,那就取决于一些参数的设置,
可能是只允许超级用户使用该命令,也可能是所有用户都可以使用该命令。
crontab 命令的语法格式如下:
crontab [-u user] file
crontab [-u user]{-l|-r|-e}
第一种格式用于安装一个新的crontab 文件,安装来源就是file 所指的文件,如果使用“-”
符号作为文件名,那就意味着使用标准输入作为安装来源。
-u 如果使用该选项,也就是指定了是哪个具体用户的crontab 文件将被修改。如果不指定
该选项,crontab 将默认是操作者本人的crontab ,也就是执行该crontab 命令的用户的
4
crontab 文件将被修改。
-l 在标准输出上显示当前的crontab。
-r 删除当前的crontab 文件。
-e 使用VISUAL 或者EDITOR 环境变量所指的编辑器编辑当前的crontab 文件。当
结束编辑离开时,编辑后的文件将自动安装。
在crontab 文件中如何输入需要执行的命令和时间。该文件中每行都包括六个域,其中
前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。每个域之间使用空格或
者制表符分隔。格式如下:
Minute Hour Day-of-month Month-of-year Day-of-week Commands
第一项是分钟,第二项是小时,第三项是一个月的第几天,第四项是一年的第几个月,第五
项是一周的星期几,第六项是要执行的命令。这些项都不能为空,必须填入。如果用户不需
要指定其中的几项,那么可以使用*代替。因为*是统配符,可以代替任何字符,所以就可以
认为是任何时间,也就是该项被忽略了。表1 列出了指定时间的合法范围。
表1 指定时间的合法范围
时间 合法值
minute 00-59
hour 00-23,其中00 点就是晚上12 点
day-of-month 01-31
month-of-year 01-12
day-of-week 0-6,其中周日是0
【例1】 每分钟把系统时间写入文件/home/S000/null:
* * * * * date > /home/S000/null
【例2】 每小时的10 分执行用户目录下的/home/S000/hello 这个指令:
10 * * * * /home/S000/hello
【例3】用户就可以往crontab 文件中写入多行以完成多个的命令。
* * * * * date > /home/S000/null
10 * * * * /home/S000/hello
【例4】命令域中可以写入所有可以在命令行写入的命令和符号,其他所有时间域都支持列
举,也就是域中可以写入很多的时间值,只要满足这些时间值中的任何一个都执行命令,每
两个时间值中间使用逗号分隔。
5,15 16,17 * * * command
这就是表示任意天任意月,其实就是每天的下午4 点、5 点的5 min、15 min 时执行命令。
【例5】 每天早晨三点二十分执行用户目录下如下所示的两个指令(每个指令以 ; 分隔):
20 3 * * * (date > /home/S000/null ;/home/S000/hello)
输入命令man crontab 可以查看命令crontab 的在线帮助资料。
四、实验要求
1.独立完成实验内容;
2.良好的编程风格,必要的文档和注释
3.用户编写的cron 命令命名为mycron,用手动启动(mycron &)程序。
4.用户编写的crontab 命令命名为mycrontab。
5.用户的crontab 文件放在用户自己的目录下,如 /home/S000/S000.cron。
6.至少实现【例1】【例2】【例3】的功能。
7.【例4】【例5】的功能为选择内容

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -