- 浏览: 332684 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
ProgrammingPower:
非常感谢您,搞定了,哈哈!
Debian下安装CodeBlocks -
hfa1s2:
是的。谢谢你哈! 我解决了这个问题
python模块之smtplib: 用python发送SSL/TLS安全邮件 -
huangro:
587端口的是很麻烦的,毕竟是需要ssl验证的。
python模块之smtplib: 用python发送SSL/TLS安全邮件 -
hfa1s2:
我想利用内网往公司邮箱里发,但接口是587 的 而且需要 SS ...
python模块之smtplib: 用python发送SSL/TLS安全邮件 -
zyb88325:
你好 我现在用的cakephp2.0,因为服务器不支持rewr ...
CakePHP常用技巧总结
转至:http://www.ibm.com/developerworks/cn/linux/l-job-scheduling.html 如何轻松地管理系统 |
|
级别: 中级
Ian Shields , 高级程序员, IBM
2007 年 8 月 27 日
系统管理员需要在系统负载低的午夜运行作业,或者需要每天或每月运行作业,同时又不愿意牺牲睡眠时间或假期。调度任务的其他原因包括自动执行日常任务或者确保每次都以相同的方式处理任务。本文帮助您使用<!-- START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --> <!-- END RESERVED FOR FUTURE USE INCLUDE FILES-->cron
和at
功能调度作业定期运行或在指定的时间运行一次。
Linux® 和 UNIX® 系统允许调度任务在以后执行一次,或者重复运行。本文是从 developerWorks 教程 “LPI 102 考试准备:管理任务 ” 摘录的,讲解如何调度作业定期运行,或在指定的时间运行一次。
在 Linux 系统上,许多管理任务必须频繁地定期执行。这些任务包括轮转日志文件以避免装满文件系统、备份数据和连接时间服务器来执行系统时间同步。上面提到的教程更详细地介绍了这些管理任务。在本文中,学习 Linux 中提供的调度机制,包括 cron
和 anacron
设施以及 crontab
和 at
命令。即使系统常常关机,anacron
也可以帮助调度作业。
以一定的时间间隔运行作业需要使用 cron
设施进行管理,它由 crond
守护进程和一组表(描述执行哪些操作和采用什么样的频率)组成。这个守护进程每分钟唤醒一次,并通过检查 crontab 判断需要做什么。用户使用 crontab
命令管理 crontab。crond
守护进程常常是在系统启动时由 init 进程启动的。
为了简单,假设希望定期运行清单 1 所示的命令。这个命令实际上只报告日期和时间,其他什么事都不做,但是它可以说明如何使用 crontab
设置 cron 作业,而且还可以通过输出看到作业运行的时间。设置 crontab 条目需要一个包含转义的 shell 元字符的字符串,所以适合于简单的命令和参数。在这个示例中,将从脚本 /home/ian/mycrontab.sh 运行 echo
命令,这个脚本不需要参数。
这可以减少处理转义字符的工作。
[ian@lyrebird ~]$ cat mycrontest.sh #!/bin/bash echo "It is now $(date +%T) on $(date +%A)" [ian@lyrebird ~]$ ./mycrontest.sh It is now 18:37:42 on Friday |
使用 crontab
命令和 -e
(表示 “edit”)选项创建 crontab。这会打开 vi
编辑器,除非在 EDITOR 或 VISUAL 环境变量中指定了另一种编辑器。
每个 crontab 条目包含六个字段:
- 分钟
- 小时
- 日
- 月
- 星期
- 由
sh
执行的字符串
分钟和小时的范围分别是 0-59 和 0-12,日和月的范围分别是 1-31 和 1-12。星期的范围是 0-6,0 表示星期日。星期也可以指定为 sun、mon、tue 等等。第 6 个字段包含前 5 个字段之后的所有内容,它是要传递给 sh
的字符串。百分号(%)将转换为空行,所以如果要使用 % 或其他任何特殊字符,就要在前面加上反斜线(\)。第一个 % 之前的一行传递给 shell,这个 % 之后的所有行都作为标准输入传递。
各个与时间相关的字段可以指定一个单独的值、值的范围(比如 0-10 或 sun-wed)或者以逗号分隔的单独值和范围列表。清单 2 给出一个 crontab 条目示例。
0,20,40 22-23 * 7 fri-sat /home/ian/mycrontest.sh |
在这个示例中,我们的命令在 7 月的每个星期五和星期六晚上 10 点到午夜之间的第 0、20、40 分钟(每 20 分钟)执行。关于指定时间的其他方式的细节,参见 crontab(5) 的手册页。
您可能想知道对来自命令的输出会如何处理。为使用 cron 而设计的大多数命令会使用 syslog 在日志中记录输出(参见教程 “LPI 102 考试准备:管理任务 ” 中的讨论)。但是,定向到 stdout 的输出会通过电子邮件发送给用户。清单 3 给出我们的命令示例可能产生的输出。
From ian@lyrebird.raleigh.ibm.com Fri Jul 6 23:00:02 2007 Date: Fri, 6 Jul 2007 23:00:01 -0400 From: root@lyrebird.raleigh.ibm.com (Cron Daemon) To: ian@lyrebird.raleigh.ibm.com Subject: Cron <ian@lyrebird> /home/ian/mycrontest.sh Content-Type: text/plain; charset=UTF-8 Auto-Submitted: auto-generated X-Cron-Env: <SHELL=/bin/sh> X-Cron-Env: <HOME=/home/ian> X-Cron-Env: <PATH=/usr/bin:/bin> X-Cron-Env: <LOGNAME=ian> X-Cron-Env: <USER=ian> It is now 23:00:01 on Friday |
|
用 crontab
命令创建的 crontab 存储在 /etc/spool/cron 下面的一个子目录中,这个子目录与创建 crontab 的用户同名,所以上面的 crontab 存储在 /etc/spool/cron/ian 中。因此,与 passwd
命令一样,crontab
命令是一个用根权限运行的 suid 程序。
除了 /var/spool/cron 中的用户 crontab 文件之外,cron
还会检查 /etc/crontab 文件和 /etc/cron.d 目录中的文件。在这些系统 crontab
中,在第五个时间字段(星期)和命令之间增加了一个字段。这个字段指定哪个用户应该运行这个命令,一般情况下是根用户。清单 4 给出一个
/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 |
在这个示例中,真正的工作由 run-parts
命令执行,它运行 /etc/cron.hourly、/etc/cron.daily 等目录中的脚本;/etc/crontab
仅仅控制执行作业的时间。注意,这里的所有命令都作为根用户运行。还要注意,crontab 可以包含 shell
变量赋值,这些赋值会在运行命令之前执行。
cron 适合那些连续运行的系统。对于那些常常不开机的系统,比如笔记本计算机,可以使用另一个实用程序 anacron (表示 “anachronistic cron”)调度每日、每周或每月执行的作业。anacron 不处理每小时执行的作业。
anacron 在 /var/spool/anacron 中保留时间戳文件,记录作业运行的时间。当 anacron 运行时,它检查自作业上一次运行以来是否已经经过了所需的天数,如果需要,就运行作业。anacron 的作业表存储在 /etc/anacrontab 中,文件格式与 /etc/crontab 略有不同。与 /etc/crontab 一样,/etc/anacrontab 可以包含环境设置。每个作业有四个字段:
- 周期
- 延迟
- 作业标识符
- 命令
周 期是天数,但是可以指定为 @monthly,这确保作业每个月只运行一次(无论这个月中有多少天)。延迟是在作业符合运行条件之后,到实际启动它之前等待的分钟数。可以使用这个设 置防止在系统启动时集中执行作业。作业标识符可以包含除了斜线(/)之外的所有非空白字符。
/etc/crontab 和 /etc/anacrontab 都通过直接编辑进行更新。不使用 crontab
命令更新这些文件或 /etc/cron.d 目录中的文件。
|
|
有时候,需要只运行作业一次而不是定期运行。为此,应该使用 at
命令。要运行的命令是从 -f
选项指定的文件读取的,如果没有使用 -f
,那么从 stdin 读取。-m
选项向用户发送邮件,即使命令没有 stdout。-v
选项显示运行作业的时间。这个时间也显示在输出中。
清单 5 给出一个运行 mycrontest.sh
脚本的示例。清单 6 显示在运行作业之后通过邮件发送给用户的输出。注意,这里的输出比对应的 cron 作业输出要简单一些。
[ian@lyrebird ~]$ at -f mycrontest.sh -v 10:25 Sat Jul 7 10:25:00 2007 job 5 at Sat Jul 7 10:25:00 2007 |
From ian@lyrebird.raleigh.ibm.com Sat Jul 7 10:25:00 2007 Date: Sat, 7 Jul 2007 10:25:00 -0400 From: Ian Shields <ian@lyrebird.raleigh.ibm.com> Subject: Output from your job 5 To: ian@lyrebird.raleigh.ibm.com It is now 10:25:00 on Saturday |
时间的设置可以非常复杂。清单 7 给出几个示例。参见 at
的手册页、/usr/share/doc/at/timespec 文件或 /usr/share/doc/at-3.1.10/timespec 这样的文件(这个示例中的 3.1.10 是 at
包的版本号)。
[ian@lyrebird ~]$ at -f mycrontest.sh 10pm tomorrow job 14 at Sun Jul 8 22:00:00 2007 [ian@lyrebird ~]$ at -f mycrontest.sh 2:00 tuesday job 15 at Tue Jul 10 02:00:00 2007 [ian@lyrebird ~]$ at -f mycrontest.sh 2:00 july 11 job 16 at Wed Jul 11 02:00:00 2007 [ian@lyrebird ~]$ at -f mycrontest.sh 2:00 next week job 17 at Sat Jul 14 02:00:00 2007 |
|
at
命令还有一个 -q
选项。随着队列的增长,作业的 nice
值也会增长。
还有一个 batch
命令,它与 at
命令相似,但是作业只在系统负载足够低时运行。这些特性的细节参见手册页。
|
|
可以管理 cron 和 at 作业。使用 crontab
命令和 -l
选项列出 crontab,使用 atq
命令显示用 at
命令加入队列中的作业,见清单 8。
[ian@lyrebird ~]$ crontab -l 0,20,40 22-23 * 7 fri-sat /home/ian/mycrontest.sh [ian@lyrebird ~]$ atq 16 Wed Jul 11 02:00:00 2007 a ian 17 Sat Jul 14 02:00:00 2007 a ian 14 Sun Jul 8 22:00:00 2007 a ian 15 Tue Jul 10 02:00:00 2007 a ian |
如果希望查看 at
调度执行的实际命令,那么可以使用 at
命令并加上 -c
选项和作业号。您会注意到,在发出 at
命令时生效的大多数环境设置会随调度的作业一起保存。清单 9 给出清单 7 和清单 8 中作业 15 的部分输出。
#!/bin/sh # atrun uid=500 gid=500 # mail ian 0 umask 2 HOSTNAME=lyrebird.raleigh.ibm.com; export HOSTNAME SHELL=/bin/bash; export SHELL HISTSIZE=1000; export HISTSIZE SSH_CLIENT=9.67.219.151\ 3210\ 22; export SSH_CLIENT SSH_TTY=/dev/pts/5; export SSH_TTY USER=ian; export USER ... HOME=/home/ian; export HOME LOGNAME=ian; export LOGNAME ... cd /home/ian || { echo 'Execution directory inaccessible' >&2 exit 1 } ${SHELL:-/bin/sh} << `(dd if=/dev/urandom count=200 bs=1 \ 2>/dev/null|LC_ALL=C tr -d -c '[:alnum:]')` #!/bin/bash echo "It is now $(date +%T) on $(date +%A)" |
注意,我们脚本文件的内容已经复制在 一个 here-document 中,这个 here-document 将由 SHELL 变量指定的 shell 执行(如果没有设置 SHELL 变量,就使用 /bin/sh)。关于 here-document 的信息参见教程 “LPI 101 考试准备,主题 103:GNU 和 UNIX 命令 ”。
可以使用 cron
命令和 -r
选项删除所有调度的 cron 作业,见清单 10。
[ian@lyrebird ~]$ crontab -l 0,20,40 22-23 * 7 fri-sat /home/ian/mycrontest.sh [ian@lyrebird ~]$ crontab -r [ian@lyrebird ~]$ crontab -l no crontab for ian |
要删除系统 cron 或 anacron 作业,应该编辑 /etc/crontab、/etc/anacrontab 或者编辑或删除 /etc/cron.d 目录中的文件。
可以使用 atrm
命令加作业号删除用 at
命令调度的一个或多个作业。多个作业应该用空白分隔。清单 11 给出一个示例。
[ian@lyrebird ~]$ atq 16 Wed Jul 11 02:00:00 2007 a ian 17 Sat Jul 14 02:00:00 2007 a ian 14 Sun Jul 8 22:00:00 2007 a ian 15 Tue Jul 10 02:00:00 2007 a ian [ian@lyrebird ~]$ atrm 16 14 15 [ian@lyrebird ~]$ atq 17 Sat Jul 14 02:00:00 2007 a ian |
|
|
如果文件 /etc/cron.allow 存在,那么非根用户必须在其中列出,才能使用 crontab
和 cron 设施。如果 /etc/cron.allow 不存在,但是 /etc/cron.deny 存在,那么其中列出的非根用户不能使用 crontab
或 cron 设施。如果这两个文件都不存在,那么只允许超级用户使用这个命令。空的 /etc/cron.deny 文件允许所有用户使用 cron 设施,这是默认情况。
/etc/at.allow 和 /etc/at.deny 文件对 at 设施起相似的作用。
|
|
如果想了解关于 Linux 管理任务的更多信息,请阅读教程 “LPI 102 考试准备:管理任务 ”,或者参见下面的 参考资料 。不要忘记 rate 这个页面 。
学习
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文
。
- 回顾教程 “LPI 102 考试准备:管理任务
”(developerWorks,2007 年 7 月),了解关于 Linux 上其他管理任务的信息,包括用户管理、备份、系统日志和 Network Time Protocol。它是 LPI 考试准备教程系列
的一部分,这个系列覆盖 Linux 基础知识,帮助您准备系统管理员认证。本教程还引用了这个系列中的两个教程 “LPI 101 考试准备:GNU 和 UNIX 命令
”
和
“LPI 101 考试准备:设备、Linux 文件系统和 Filesystem Hierarchy Standard
”。
-
Linux
Documentation Project
有很多非常有用的文档,尤其是其中的 HOWTO 指导。
- 在 developerWorks Linux 专区
中可以找到为 Linux 开发人员准备的更多教程,包括 Linux 教程
,以及最近几个月 读者最喜爱的 Linux 文章和教程
。
- 随时关注 developerWorks 技术活动和网络广播 。
获得产品和技术
-
索取 SEK for Linux
,这套 DVD(两张)包含来自 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere® 的最新 IBM 试用版 Linux 软件。
- 使用 IBM 试用软件
构建您的下一个 Linux 开发项目,这些软件可以从 developerWorks 直接下载。
讨论
- 参与论坛讨论
。
- 通过新的 developerWorks spaces
中的开发人员 blog、论坛、podcast 和社区主题,加入 developerWorks 社区
。
|
Ian Shields 为 developerWorks Linux 专区的许多 Linux 项目工作。他是 IBM 北卡罗莱那州 Research Triangle Park 的一名高级程序员。他于 1973 年作为一名系统工程师加入 IBM 位于澳大利亚堪培拉的子公司。之后,在加拿大蒙特利尔和北卡罗莱那州 RTP 从事通信系统和普及运算。他拥有多项专利并发表了若干篇论文。他毕业于 Australian National University,本科学位是纯数学和哲学。他拥有北卡罗来纳州立大学的计算机硕士和博士学位。 |
发表评论
-
Linux下防火墙开启相关端口及查看已开启端口
2012-06-13 00:04 1853Linux 下防火墙开启相关端口及查看已开启端口 ... -
Linux服务器主要配置
2010-11-30 11:14 9531. SVN配置 http://wiki.ubuntu.org ... -
目录操作
2010-07-27 15:30 1073[size=x-small;]目录是存储于磁盘上的数据结构,它 ... -
useradd和adduser命令之间的区别
2010-06-23 10:41 2206Linux下添加用户可以使用useradd命令,也可以使用ad ... -
文件名和文件内容批量替换
2010-06-03 00:17 1316文件名替换: ls | while read f; do ... -
SSH KEYGEN 免输入密码
2010-05-24 17:08 1271ssh远程登录服务器时,为了避免输入密码,可以用以下方式进行免 ... -
Fcitx输入法安装
2010-05-06 13:11 1356首先,安装fcitx sudo aptitude inst ... -
Ubuntu10.04终于出了
2010-04-30 14:28 834等了好久,终于等到这个号称Bug最少的版本的面世,晚上尝试下, ... -
在Dreamhost服务器上定制python环境
2010-03-25 17:58 2112前段时间购买了一 ... -
Ubuntu下VNC配置
2010-03-22 18:13 16691通过将服务器配置成VNC SERVER,可以让其他主机使用图形 ... -
访问virtualbox虚拟机中架设的网站
2010-03-19 15:50 1584翻译比较累,直接贴上原文: 6.3.1. Configuri ... -
HowTo: Install guest additions for VirtualBox on Debian Lenny 5.0
2010-01-29 14:52 1325原文章地址:http://www.ithowto.ro/200 ... -
linux下配置防火墙
2009-12-04 15:52 1039记录下: 1.安装防火墙ufw sudo aptitud ... -
linux下ssh授权
2009-12-04 15:31 2922写下这个作为备忘: 1. 创建目录 mkdir ~/.s ... -
Ubuntu9.10 sources.list
2009-11-23 13:40 2016Ubuntu9.10 sources.list: deb ... -
Ubuntu9.04杭州镜像
2009-09-10 10:16 808deb http://mirror.lupaworld.com ... -
Debian下Apache SSL配置方法
2009-04-30 13:14 56901. 安装Apache2 sudo apt-get insta ... -
使用Apache2作为django网站服务器
2009-04-29 20:49 1283花费了一些时间配置Apache2,在此将一些配置信息贴上,以作 ... -
Debian下在Apache2中安装配置xsendfile模块
2009-04-29 20:36 1715至于xsendfile模块的作用就不多说了,反正能较大程度提升 ... -
Firehol - linux下的防火墙
2008-06-30 16:10 1055在服务器中配置防火墙,推荐使用Firehol, 下载地址:ht ...
相关推荐
建筑工地扬尘治理与文明施工检查表.docx
基于java的个性化旅游攻略定制系统设计与实现.docx
数学建模培训资料 数学建模实战题目真题答案解析解题过程&论文报告 导弹追击模型的建立与求解 共6页.pdf
基础课程辅助教学-JAVA-基于springBoot程序设计基础课程辅助教学系统设计与实现
适用人群:大学生 自学者 使用场景:大学生毕设 自学者练手项目 学习与交流 其它说明:部分资源来源网络及开源社区、仅供参考与学习、不可商用、若有侵权请联系删除! 内容概要:用springmvc实现的校园选课管理系统
java课程期末考试
C++ Vigenère 密码(解密代码)
工程研究中心申报基本情况一览表.docx
Vigenère 密码(加密代码)
密码学AES算法源代码,密码学实验
基于java的百货中心供应链管理系统设计与实现.docx
环境说明:开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat 开发软件:eclipse/myeclipse/idea Maven包:Maven 浏览器:谷歌浏览器。 项目均可完美运行
【资源说明】 大数据毕业设计 基于Python+Spark机器学习天气预测系统详细文档+全部资料.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
购物系统 微信小程序+PHP毕业设计 源码+数据库+论文+启动教程
BIM 人才培养的框架和方法 相关的标准
源项目文件
ActiveMQ消息中间件的测试案例
内容概要:本文全面解析了汽车电动化、智能化背景下,车规芯片SoC的重要性和发展趋势。首先概述了汽车行业发展三大趋势——新能源车市场崛起、智能化引领新潮流、商业模式及价值链重构。随后详细介绍了车规芯片SoC的应用领域,包括主控芯片、功率芯片、CMOS芯片、射频接收器、传感器、存储芯片及汽车面板,并阐述了它们的作用和技术需求。文章接着讨论了电子电气架构的演进路径,从分布式向集中式的演进对汽车芯片供应链带来的影响。最后探讨了汽车SoC的技术特征、应用领域、未来发展方向及其面临的挑战。 适合人群:汽车芯片设计师、汽车制造商、科研机构及相关行业的专业人士。 使用场景及目标:理解和掌握汽车芯片尤其是SoC在智能电动汽车中的应用及未来发展,帮助相关从业者做出更好的技术和商业决策。 其他说明:随着智能电动汽车市场的快速成长,车规芯片SoC作为核心技术将面临前所未有的机遇和挑战。
用于控制 Broadlink RM2/3 (Pro) 遥控器、A1 传感器平台和 SP2/3 智能插头的 Python 模块python-broadlink用于本地控制 Broadlink 设备的 Python 模块和 CLI。支持以下设备通用遥控器RM home、RM mini 3、RM plus、RM pro、RM pro+、RM4 mini、RM4 pro、RM4C mini、RM4S、RM4 TV mate智能插头SP mini、SP mini 3、SP mini+、SP1、SP2、SP2-BR、SP2-CL、SP2-IN、SP2-UK、SP3、SP3-EU、SP3S-EU、SP3S-US、SP4L-AU、SP4L-EU、SP4L-UK、SP4M、SP4M-US、Ankuoo NEO、Ankuoo NEO PRO、Efergy Ego、BG AHC/U-01开关MCB1、SC1、SCB1E、SCB2出口BG 800, BG 900电源板MP1-1K3S2U、MP1-1K4S、MP2环境传感器A1报警套件S1C、S2KIT灯泡LB1、LB26 R1、LB2
这是一份关于五个城市的PM2.5监测数据文件,以CSV格式存储。数据涵盖了广州、北京、沈阳等地的空气质量情况,旨在帮助研究人员和数据分析人员更好地理解城市空气污染状况。 使用人群 适合对环境科学、大气污染研究感兴趣的科研工作者、学生及环保组织成员使用。 数据内容 包含五个主要城市的PM2.5浓度数据 时间跨度较长,覆盖多年数据 CSV格式方便导入各种数据分析软件进行进一步处理和分析