`
javatome
  • 浏览: 823083 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Linux & Unix shell 编程指南之cron命令

 
阅读更多

后台执行命令

cron :系统调度进程。可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月
中的不同时段运行。
At at :命令。使用它在一个特定的时间运行一些特殊的作业,或在晚一些的非负荷高峰时
间段或高峰负荷时间段运行。
& :使用它在后台运行一个占用时间不长的进程。
Nohup :使用它在后台运行一个命令,即使在用户退出时也不受影响。


3.1 cron和crontab

cron 是系统主要的调度进程,可以在无需人工干预的情况下运行作业。
有个 crontab 命令允许用户提交、编辑或删除相应的作业。
每一个用户都可以有一个 crontab 文件来保存调度信息。可以使用它运行任意一个shell
脚本或某个命令,每小时运行一次,或一周三次,这完全取决于你。
每一个用户都可以有自己的 crontab 文件,但在一个较大的系统中,系统管理员一般
会禁止这些文件,而只在整个系统保留一个这样的文件。系统管理员是通过 cron.deny
和 cron.allow 这两个文件来禁止或允许用户拥有自己的 crontab文件。

3.1.1 crontab的域
为了能够在特定的时间运行作业,需要了解 crontab文件每个条目中各个域的意义和格式。
第1列 分钟 1~59
第2列 小时 1~23(0表示子夜)
第3列 日 1~31
第4列 月 1~12
第5列 星期 0~6(0表示星期天)
第6列 要运行的命令
crontab 的格式如下:
分< >时< >日< >月< >星期< >要运行的命令
其中< >表示空格。
Crontab 文件的一个条目是从左边读起的,第一列是分,最后一列是要运行的命令,它位
于星期的后面。
在这些域中,可以用横杠 "-" 来表示一个时间范围,例如希望星期一至星期五运行某个作业,
那么可以在星期域使用 1-5来表示。还可以在这些域中使用逗号 "," ,例如希望星期一和星
期四运行某个作业,只需要使用 1,4 来表示。可以用星号 * 来表示连续的时间段。如果你
对某个表示时间的域没有特别的限定,也应该在该域填入 * 。该文件的每一个条目必须含有
5个时间域,而且每个域之间要用空格分隔。该文件中所有的注释行要在行首用 # 来表示。

crontab 文件条目 例子:
30 21* * * /apps/bin/cleanup.sh
上面的例子表示每晚的21:30 运行 /apps/bin目录下的 cleanup.sh。
45 4 1,10,22 * * /apps/bin/backup.sh
上面的例子表示每月1、1 0、2 2日的 4:45 运行 /apps/bin目录下的backup.sh。
10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;
上面的例子表示每周六、周日的1:10运行一个find命令。
0,30 18-23 * * * /apps/bin/dbcheck.sh
上面的例子表示在每天 18:00至23:00之间每隔30分钟运行 /apps/bin目录下的 dbcheck.sh。
0 23 * * 6 /apps/bin/qtrend.sh
上面的例子表示每星期六的11:00pm运行 /apps/bin目录下的 qtrend.sh。

上面例子中,每个命令都给出了绝对路径。当使用 crontab 运行 shell 脚本时,用户要给出
脚本的绝对路径,设置相应的环境变量。记住,既然是用户向 cron提交了这些作业,就要
向 cron 提供所需的全部环境。不要假定 cron 知道所需要的特殊环境,它其实并不知道。
所以要保证在 shell 脚本中提供所有必要的路径和环境变量,
除了一些自动设置的全局变量。
如果 cron 不能运行相应的脚本,用户将会收到一个邮件说明其中的原因。

3.1.2 crontab命令选项
crontab 命令的一般形式为:
Crontab [-u user] -e -l -r
其中:
-u 用户名。
-e 编辑 crontab 文件。
-l 列出 crontab 文件中的内容。
-r 删除 crontab 文件。
如果使用自己的名字登录,就不用使用 -u选项,因为在执行 crontab 命令时,该命令能够
知道当前的用户。

3.1.3 创建一个新的 crontab 文件
在向 cron 进程提交一个 crontab 文件之前,首先要做的一件事情就是设置环境变量EDITOR。
cron 进程根据它来确定使用哪个编辑器编辑 crontab 文件。99% 的UNIX和LINUX用户使用vi,
如果你也是这样,那么你就编辑 $HOME目录下的 .profile 文件,在其中加入这样一行:
EDITOR=vi; export EDITOR
然后保存并退出。
不妨创建一个名为 <user>cron 的文件,其中<user>是用户名,如lanseyokeycron。
首先创建一个s hell 文件如 time.sh
echo "Now time is:"
date
然后打开文件 lanseyokeucron 加入如下的内容:
# echo the date to the console every
# 15 minutes between 6am and 6pm on Sunday
0,15,30,45 06-18 * * 0 /lanseyokey/time.sh
保存并退出,确信前面5个域用空格分隔。
在上面的例子中,系统将每隔 15 分钟输出一次当前时间。如果系统崩溃或挂起,
从最后所显示的时间就可以一眼看出系统是什么时间停止工作的。

为了提交刚刚创建的 crontab 文件,可以把这个新创建的文件作为 cron 命令的参数:
$ crontab lanseyokeycron
现在该文件已经提交给 cron 进程,它将每隔 15 分钟运行一次。
同时,新创建文件的一个副本已经被放在 /var/spool/cron 目录中,文件名就是用户名(即,
lanseyokey)。

3.1.4 列出crontab文件
为了列出 crontab 文件,可以用:
$ cron -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (lanseyokeycron installed on Sun Dec 20 11:28:00 2009)
# (Cron vesion -- $Id: crontab.c.v 2.13 1994/01/17 04:20:37 vixie Exp $)
# echo the date to the console every
# 15 minutes between 6am and 6pm on Sunday
0,15,30,45 06-18 * * 0 /lanseyokey/time.sh
注意:若是以lanseyokey用户名登录则不需使用 -u 选项,否则使用
$ crontab -u lanseyokey -l
可以使用这种方法在 $HOME 目录中对 crontab 文件做一备份:
$ crontab -l > $HOME/mycron

3.1.5 编辑 crontab 文件
如果希望添加、删除或编辑 crontab 文件中的条目,而 EDITOR环境变量又设置为 vi,那么
就可以用 vi 来编辑 crontab 文件,相应的命令为:
$ crontab -e
可以像使用 vi 编辑其他任何文件那样修改 crontab 文件并退出。如果修改了某些条目或添
加了新的条目,那么在保存该文件时, cron 会对其进行必要的完整性检查。如果其中的某个
域出现了超出允许范围的值,它会提示你。
在编辑 crontab 文件时,没准会加入新的条目。例如,加入下面的一条:
# echo greeting to user
0 06-18 * * * /bin/echo "Hello, Welcome to Linux"
保存并退出。最好在 crontab 文件的每一个条目之上加入一条注释,这样就可以知道
它的功能、运行时间,更为重要的是,知道这是哪位用户的作业。
现在让我们使用前面讲过的crontab -l命令列出它的全部信息:
$ cron -u lanseyokey -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (lanseyokeycron installed on Sun Dec 20 11:28:00 2009)
# (Cron vesion -- $Id: crontab.c.v 2.13 1994/01/17 04:20:37 vixie Exp $)
# echo the date to the console every
# 15 minutes between 6am and 6pm on Sunday
0,15,30,45 06-18 * * 0 /lanseyokey/time.sh
# echo greeting to user
0 06-18 * * * /bin/echo "Hello, Welcome to Linux"

删除 crontab 文件,可以用:
$ crontab -r
恢复丢失的 crontab 文件
如果不小心误删了 crontab 文件,假设你在自己的 $HOME 目录下还有一个备份,那么可以
将其拷贝到 /var/spool/cron/<username>,其中<username>是用户名。
如果由于权限问题无法完成拷贝,可以用:
$ crontab <filename>
其中,<filename> 是你在 $HOME 目录中副本的文件名。

建议在自己的 $HOME 目录中保存一个该文件的副本,因为r键紧挨在e键的右边,很容易误删。
有些系统文档建议不要直接编辑 crontab 文件,而是编辑该文件的一个副本,然后重新提
交新的文件。有些 crontab 的变体有些怪异,所以在使用 crontab 命令时要格外小心。
如果遗漏了任何选项,crontab 可能会打开一个空文件,或者看起来像是个空文件,这时敲
delete 键退出,不要按<Ctrl-D>,否则将丢失 crontab 文件。

分享到:
评论

相关推荐

    LINUX与UNIX SHELL编程指南(很全)

    第四部分 基础shell编程 第16章 shell脚本介绍 151 16.1 使用shell脚本的原因 151 16.2 脚本内容 151 16.3 运行一段脚本 152 16.4 小结 153 第17章 条件测试 154 17.1 测试文件状态 154 17.2 测试时使用逻辑操作符 ...

    Linux与unix shell编程指南

    本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell ...

    Linux与Unix Shell编程指南(PDF格式,共30章)

    本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 ...

    LINUX与UNIX SHELL编程指南 高清PDF

    本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell...

    LINUX与UNIX SHELL编程指南

    内容简介回到顶部↑本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目录回到顶部...

    绝版经典《Linux与UNIX Shell编程指南》

    前言 第一部分 shell 第1章 文件安全与权限 1 ...第五部分 高级shell编程技巧 第25章 深入讨论&lt;&lt; 281 25.1 快速创建一个文件 281 25.2 快速创建打印文档 281 25.3 自动选择菜单 282 25.4 自动...

    linux与unix shell编程指南.rar

    linux/unix shell编程指南,全面介绍了Linu/unix shell编程的常用知识和技巧,是不可多得的编程宝典。 目 录 译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限...

    LINUX与UNIX SHELL编程指南.rar

    第四部分 基础shell编程 第16章 shell脚本介绍 151 16.1 使用shell脚本的原因 151 16.2 脚本内容 151 16.3 运行一段脚本 152 16.4 小结 153 第17章 条件测试 154 17.1 测试文件状态 154 17.2 测试时使用逻辑操作符 ...

    LINUX与UNIX Shell编程指南

    第四部分 基础shell编程 第16章 shell脚本介绍 151 16.1 使用shell脚本的原因 151 16.2 脚本内容 151 16.3 运行一段脚本 152 16.4 小结 153 第17章 条件测试 154 17.1 测试文件状态 154 17.2 测试时使用逻辑操作符 ...

    LINUX 与 UNIX SHELL编程指南

    第四部分 基础shell编程 第 16 章 shell 脚本介绍 151 16.1 使用 shell 脚本的原因 151 16.2 脚本内容 151 16.3 运行一段脚本 152 16.4 小结 153 第 17 章 条件测试 154 17.1 测试文件状态 154 17.2 测试时...

    linux与unix shell编程指南part2

    本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考 目 录 译者序 前言 第一部分 shell 第...

Global site tag (gtag.js) - Google Analytics