﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-落叶归根-文章分类-Linux</title><link>http://www.blogjava.net/allan-oy/category/7857.html</link><description>一个人首先要尊重别人，然后才能得到别人的尊重；一个人首先要对自己负责，然后才有资格去对别人负责。</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:35:58 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:35:58 GMT</pubDate><ttl>60</ttl><item><title>使用crond 在linux中定时执行任务</title><link>http://www.blogjava.net/allan-oy/articles/33692.html</link><dc:creator>落叶归根</dc:creator><author>落叶归根</author><pubDate>Sun, 05 Mar 2006 05:36:00 GMT</pubDate><guid>http://www.blogjava.net/allan-oy/articles/33692.html</guid><wfw:comment>http://www.blogjava.net/allan-oy/comments/33692.html</wfw:comment><comments>http://www.blogjava.net/allan-oy/articles/33692.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/allan-oy/comments/commentRss/33692.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/allan-oy/services/trackbacks/33692.html</trackback:ping><description><![CDATA[<SPAN class=style1><B>使用crond 在linux中定时执行任务<BR><BR>
<P>定期运行程序或者脚本是管理员要面临一个很普遍的问题</P>
<P><BR>一、 使用crond监控程序运行程序</P>
<P>1. 使用cron来定期执行任务<BR>使用crond (cron监控程序)来定期运行一些任务，比如备份日志、数据库、把日志发送到自己邮箱等等操作都可以又定期运行程序来完成。<BR>crond是个脚本，每次Linux启动的时候都自动起到该脚本，该脚本是 /etc/rc.d/init.d 下面的，每次系统启动的时候就自动会启动该目录下</P>
<P>的脚本。<BR>cron有两个配置文件，一个/etc/crontab，是一个全局配置文件，一组是crontab命令生成生成的配置文件，是属于用户级的。</P>
<P>一般对管理员来说，只要使用全局配置的/etc/crontab就配置文件就可以了，我们去打开配置文件看看：</P>
<P>SHELL=/bin/bash<BR>PATH=/sbin:/bin:/usr/sbin:/usr/bin<BR>MAILTO=root<BR>HOME=/</P>
<P># run-parts<BR>01 * * * * root run-parts /etc/cron.hourly<BR>02 4 * * * root run-parts /etc/cron.daily<BR>22 4 * * 0 root run-parts /etc/cron.weekly<BR>42 4 1 * * root run-parts /etc/cron.monthly</P>
<P>我们稍微来分析一下这个文件：</P>
<P>/* 设置基于什么shell来运行，我们这里是基于bash shell */<BR>SHELL=/bin/bash</P>
<P>/* 指定目录中有次文件的命令时，不需要完整目录路经 */<BR>PATH=/sbin:/bin:/usr/sbin:/usr/bin</P>
<P>/* 使用cron实际工作时，见通过邮件来同志root用户 */<BR>MAILTO=root</P>
<P>/* 与/etc/crontab配置文件相关的主目录为根目录 */<BR>HOME=/</P>
<P>/* 好了，这里是关键是，下面的是要指定什么时间运行什么目录下的任务，run-parts命令是运行指定目录下的每个脚本 */<BR># run-parts</P>
<P>/* 这一句是在每天每小时过后一分钟运行/etc/cron.hourly目录中的每个脚本文件 */<BR>01 * * * * root run-parts /etc/cron.hourly</P>
<P>/* 在每天凌晨4点2分运行/etc/cron.daily目录中的每个脚本文件 */<BR>02 4 * * * root run-parts /etc/cron.daily</P>
<P>/* 在每个星期天凌晨4点22分运行/etc/cron.weekly目录中的每个脚本文件 */<BR>22 4 * * 0 root run-parts /etc/cron.weekly</P>
<P>/* 在每个月的第一天凌晨4点42分运行/etc/cron.monthly目录中的每个脚本文件 */<BR>42 4 1 * * root run-parts /etc/cron.monthly</P>
<P>大家看到里面的"*"一定觉得很奇怪，下面我们句稍微来了解一下cron的语法：<BR>上面脚本中的时间是从左到右的，分别列出了五个字段，我们看下面的表：</P>
<P>------------------------------------------------<BR>字段&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取值范围<BR>------------------------------------------------<BR>Minute&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 ~ 59<BR>Hour&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 ~ 23，其中0是午夜，20是晚上8点<BR>Day&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 ~ 31<BR>Month&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 ~ 12<BR>Day of week&nbsp;&nbsp;&nbsp;&nbsp; 0 ~ 7，其中0和7是表示星期天<BR>------------------------------------------------</P>
<P>任何字段中的星号是通配符，例如，如果第一个字段包括星号，则特定若无其事在可能的每一分钟运行。如果要指定时间范围，比如上午8点到</P>
<P>下午4点，则可以见第二个字段设置为8~16。如果要隔一天运行任务，则可以将第三个字段设置为*/2。可以看出，如果五个字段(minute、hour</P>
<P>、day、month、day of week) 之后，cron中的每个字段就没什么神秘之处了。</P>
<P><BR>2. 用户自己的cron<BR>用户也可以计划用户自己的cron任务，比如他想要在半夜整理他的文件，然后发送邮件给自己，只要这个用户他没有在/etc/cron.deny表中，</P>
<P>就可以使用crontab -e命令来启动自己的cron文件。</P>
<P>3. 对cron的访问控制<BR>默认情况下，所有用户都能访问cron工具，要对cron进行访问控制，则可以生成/etc/cron.allow与/etc/cron.deny文件。<BR>(1)这两个文件都不存在时，每个用户都可以访问cron工具]<BR>(2)存在/etc/cron.allow文件时，则只有cron.allow文件中允许的用户才能访问cron工具，如果也有/etc/cron.deny文件，则忽略cron.deny文</P>
<P>件</P>
<P>&nbsp;</P>
<P>二、 使用at命令定期运行程序</P>
<P>1. 使用cron运行任务<BR>cron任务的缺点是计划要经常运行，假如我们只是想要让特定任务运行一次呢？那么，这时候就要用到at监控程序了。<BR>设置at命令很简单，指示定运行的时间，那么就会在哪个时候运行。at类似打印进程，会把任务放到/var/spool/at目录中，到指定时间运行它<BR>。at命令相当于另一个shell，运行at time命令时，它发送一个个命令，可以输入任意命令或者程序。at now + time命令可以在指示任务。</P>
<P>假设处理一个大型数据库，要在别人不用系统时去处理数据，比如凌晨2点5分。那么我们就应该先建立/home/mj/airplane脚本管理数据库，计</P>
<P>划处理/home/mj/air-safe文件中的结果。正常方式是这样启动下列命令:</P>
<P># at 2:05 tomorrow<BR>at&gt; /home/mj/airplane &gt; /home/mj/air-safe<BR>at&gt; Ctrl+D</P>
<P>AT Time中的时间表示方法<BR>-----------------------------------------------------------------------<BR>时间&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例子&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 说明<BR>-----------------------------------------------------------------------<BR>Minute&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at now + 5 minutes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 任务在5分钟后运行<BR>Hour&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at now + 1 hour&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 任务在1小时后运行<BR>Days&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at now + 3 days&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 任务在3天后运行<BR>Weeks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at now + 2 weeks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 任务在两周后运行<BR>Fixed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at midnight&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 任务在午夜运行<BR>Fixed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at 10:30pm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 任务在晚上10点30分开始<BR>Fixed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at 1:00 12/20/04&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 任务在2004年12月20日凌晨1点开始<BR>-----------------------------------------------------------------------</P>
<P>2.&nbsp; 查看目前在等待执行的任务<BR>输入任务后，可以使用atq命令可以看到目前等待执行的任务，输出提供了任务号、用户和任务执行时间等信息。</P>
<P># atq<BR>8&nbsp;&nbsp;&nbsp; 2004-12-15 02:05 a mj</P>
<P>里面的a表示是at任务还是batch命令生成的任务。</P>
<P>3. 删除at任务<BR>删除一个at任务比较简单，使用atrm命令就可以轻松解决。<BR>比如我知道了任务的队列号，那么就可以删除它：</P>
<P># atrm 8</P>
<P>就删除了队列号为8的at任务了。</P>
<P><BR>三、batch命令处理批处理任务</P>
<P>这个具体就不说了，该命令类似 at -q b</P>
<P>Crontab命令使用的文件具体位置: /Var/Spool/Cron/Crontabs 目录下,每个用户都有其对应的名字，比如，root用户的文件为root.</P>
<P>直接登陆窗口界面 <BR># crontab -l root file://查看作业 <BR>/etc/init.d/cron stop file://停止进程 <BR>在CONSOLE 中熟命令 crontab -e root <BR>crontab -e root file://编辑加入要执行的代码 <BR>0-59 * * * * date &gt;&gt; /export/home/keven/keven.txt file://加入次行在末尾，每分钟执行一次 </P>
<P>"格式如下： <BR>　　(1) 　(2) 　(3) 　(4) 　(5)　 (6) <BR>　　 0　　 0 　　*　　 * 　　3　　 date &gt;&gt; /export/home/keven/keven.txt <BR>　　　　　　1. 分钟 (0-60) <BR>　　　　　　2. 小时 (0-23) <BR>　　　　　　3. 日 (1-31) <BR>　　　　　　4. 月 (1-12) <BR>　　　　　　5. 星期 (0-6) <BR>　　　　　　6. 所要运行的程序 <BR>如1-59分钟，1-24 小时 </P>
<P>0 18-23 0 0 0-6 file://每天的18-23点执行，0-6为周日到周六 </P>
<P>/etc/init.d/crond(Linux为crond sunos为cron) start file://启动进程 <BR># crontab -l root <BR>查看作业是否加入执行队列。 <BR>不行退出到登陆界面，再次登陆进入，还加载就reboot </P>
<P><BR>你是不是直接编辑用户的cron文件呀? <BR>如果是当然不运行,cron demon是在启动的时候才读一次配置文件. <BR>如果你是后加的JOB 要用crontab -e来编辑用户的cron. <BR>要不你 kill -HUP cron的进程ID. <BR>重新启动这个进程. <BR>每5分钟做一次必须写成5,15,20,25,30,35,40,45,50,55 * * * * <BR>=================================== <BR>"格式如下： <BR>　　(1) 　(2) 　(3) 　(4) 　(5)　 (6) <BR>　　 0　　 0 　　*　　 * 　　3　　 /usr/bin/updatedb <BR>　　　　　　1. 分钟 (0-60) <BR>　　　　　　2. 小时 (0-23) <BR>　　　　　　3. 日 (1-31) <BR>　　　　　　4. 月 (1-12) <BR>　　　　　　5. 星期 (1-7) <BR>　　　　　　6. 所要运行的程序 <BR>但是我设成 1 0 0 0 0 /usr/bin/ps <BR>希望能自动在一分钟之后显示进程。但是没有成功。 <BR>HELP ME </P>
<P>=============================================== <BR>15 1 * * * /opt/bin/ta.sh /opt/aadir &gt; /dev/null </P>
<P>此处&gt;/dev/null 必须用吗? 何意思? <BR>输出重定向到/dev/null, 否则会mail到你的邮箱 <BR>dev/null 是一个特殊文件，所有输入到该文件的数据都会被丢弃。 <BR>&gt; /dev/null 的意思就是丢弃所有的输出内容，否则就会将输出内容发送到执行该命令的用户信箱中。 <BR>这种写法只能把标准输出送到/dev/null中，如果有错误产生的话，还是会送到信箱里的。下面的写法才可以丢弃所有的输出内容： <BR>15 1 * * * /opt/bin/ta.sh /opt/aadir &gt; /dev/null 2&gt;&amp;1 <BR></P></B></SPAN><img src ="http://www.blogjava.net/allan-oy/aggbug/33692.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/allan-oy/" target="_blank">落叶归根</a> 2006-03-05 13:36 <a href="http://www.blogjava.net/allan-oy/articles/33692.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>定时执行crontab使用方法祥解</title><link>http://www.blogjava.net/allan-oy/articles/32407.html</link><dc:creator>落叶归根</dc:creator><author>落叶归根</author><pubDate>Sat, 25 Feb 2006 09:05:00 GMT</pubDate><guid>http://www.blogjava.net/allan-oy/articles/32407.html</guid><wfw:comment>http://www.blogjava.net/allan-oy/comments/32407.html</wfw:comment><comments>http://www.blogjava.net/allan-oy/articles/32407.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/allan-oy/comments/commentRss/32407.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/allan-oy/services/trackbacks/32407.html</trackback:ping><description><![CDATA[<DIV align=center><STRONG>定时执行crontab使用方法祥解</STRONG></DIV><BR>在linux,有多种方式可以实现定时运行，使用最灵活的应该是crontab, 在使用crontab必须特别注意环境变量问题，在此以执行oracle的sqlplus为例， 说明crontab的使用方法。 <BR><STRONG>1：</STRONG>crontab 使用方法： crontab [ -e | -l | -r ] 文件名 -e:编辑任务 -l:显示任务信息 -r:删除定时执行任务信息 <BR><BR><STRONG>2：</STRONG>crontab中处理的文件格式为 分钟 小时 日期 月 星期 执行的文件名 *代表所有条件 5 * * * * rem /home/oracle/execsql 代表每个小时的5分钟时执行/home/oracle/execsql文件 <BR><BR><STRONG>3：</STRONG>对于sql等需要在特定的环境变量下运行的命令，在执行文件中必须列出。 如在oracle下执行sqlplus，必须按以下格式编写： $ cat execsql ORACLE_HOME=/ora815;export ORACLE_HOME ORACLE_OWNER=oracle;export ORACLE_OWNER ORACLE_SID=ora815;export ORACLE_SID ORACLE_BASE=/ora815/app/oralce;export ORACLE_BASE LD_LIBRARY_PATH=$ORACLE_HOME/lib;export LD_LIBRARY_PATH PATH=$PATH:$ORACLE_HOME/bin:$LD_LIBRARY_PATH;export PATH NLS_LANG=AMERICAN_AMERICA.ZHS16CGB231280;export NLS_LANG /ora815/bin/sqlplus test1/test1 @test1.ext (执行@test1.ext文件，数据库的用户名/密码为test1/test1) <BR><BR>其中要求execsql为可执行的程序 $ ls -al execsql -rwxr-xr-x 1 oracle dba 374 Oct 07 15:17 execsql <BR><img src ="http://www.blogjava.net/allan-oy/aggbug/32407.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/allan-oy/" target="_blank">落叶归根</a> 2006-02-25 17:05 <a href="http://www.blogjava.net/allan-oy/articles/32407.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>