正在加载......
类别:[MySQL学习]  时间: 2008-08-04 16:31:18; 浏览: 34135; 评论: 0  

    MySQL中文手册把mysql主从同步称为“复制”,感觉翻译的很不好。中文手册主从同步地址是:http://dev.mysql.com/doc/refman/5.1/zh/replication.html

    看资料离不开手册,但每次看手册也很繁琐,现把我认为的一些关键的地方整理出来,方便你我他她。

    一:主从同步原理关键句

    主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

    MySQL复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。

    每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新,以便从服务器可以对其数据拷贝执行相同的更新。

    从服务器设置为复制主服务器的数据后,它连接主服务器并等待更新过程。如果主服务器失败,或者从服务器失去与主服务器之间的连接,从服务器保持定期尝试连接,直到它能够继续帧听更新。由--master-connect-retry选项控制重试间隔。 默认为60秒。

    每个从服务器跟踪复制时间。主服务器不知道有多少个从服务器或在某一时刻有哪些被更新了。

    二:主从同步的过程

    MySQL使用3个线程来执行复制功能(其中1个在主服务器上,另两个在从服务器上。当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句。主服务器创建一个线程将二进制日志中的内容发送到从服务器。该线程可以识别为主服务器上SHOW PROCESSLIST的输出中的Binlog Dump线程。从服务器I/O线程读取主服务器Binlog Dump线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中,即中继日志。第3个线程是SQL线程,是从服务器创建用于读取中继日志并执行日志中包含的更新。

    在前面的描述中,每个从服务器有3个线程(应该是每对主从)。有多个从服务器的主服务器创建为每个当前连接的从服务器创建一个线程;每个从服务器有自己的I/O和SQL线程。

    三:主从同步过程的相关文件

    默认情况,中继日志使用host_name-relay-bin.nnnnnn形式的文件名,其中host_name是从服务器主机名,nnnnnn是序列号。用连续序列号来创建连续中继日志文件,从000001开始。从服务器跟踪索引文件中目前正使用的中继日志。 默认中继日志索引文件名为host_name-relay-bin.index。默认情况,在从服务器的数据目录中创建这些文件。可以用--relay-log和--relay-log-index服务器选项覆盖 默认文件名

    中继日志与二进制日志的格式相同,并且可以用mysqlbinlog读取。SQL线程执行完中继日志中的所有事件并且不再需要之后,立即自动删除它。没有直接的删除中继日志的机制,因为SQL线程可以负责完成。然而,FLUSH LOGS可以循环中继日志,当SQL线程删除日志时会有影响。

    从属复制服务器在数据目录中另外创建两个小文件。这些状态文件默认名为主master.info和relay-log.info。它们包含SHOW SLAVE STATUS语句的输出所显示的信息(关于该语句的描述参见13.6.2节,“用于控制从服务器的SQL语句”)。状态文件保存在硬盘上,从服务器关闭时不会丢失。下次从服务器启动时,读取这些文件以确定它已经从主服务器读取了多少二进制日志,以及处理自己的中继日志的程度。

    四:主从同步过程的相关文件和MySQL语句的关系

    由I/O线程更新master.info文件。文件中的行和SHOW SLAVE STATUS显示的列的对应关系为:

以下是引用片段:
行 描述
1 文件中的行号
2 Master_Log_File
3 Read_Master_Log_Pos
4 Master_Host
5 Master_User
6 密码(不由SHOW SLAVE STATUS显示)
7 Master_Port
8 Connect_Retry
9 Master_SSL_Allowed
10 Master_SSL_CA_File
11 Master_SSL_CA_Path
12 Master_SSL_Cert
13 Master_SSL_Cipher
14 Master_SSL_Key

 
    由SQL线程更新relay-log.info文件。文件中的行和SHOW SLAVE STATUS显示的列的对应关系为:
以下是引用片段:
行 描述
1 Relay_Log_File
2 Relay_Log_Pos
3 Relay_Master_Log_File
4 Exec_Master_Log_Pos

 
    当备份从服务器的数据时,你还应备份这两个小文件以及中继日志文件。它们用来在恢复从服务器的数据后继续进行复制。如果丢失了中继日志但仍然有relay-log.info文件,你可以通过检查该文件来确定SQL线程已经执行的主服务器中二进制日志的程度。然后可以用Master_Log_File和Master_LOG_POS选项执行CHANGE MASTER TO来告诉从服务器重新从该点读取二进制日志。当然,要求二进制日志仍然在主服务器上。

    如果从服务器正复制LOAD DATA INFILE语句,你应也备份该目录内从服务器用于该目的的任何SQL_LOAD-*文件。从服务器需要这些文件继续复制任何中断的LOAD DATA INFILE操作。用--slave-load-tmpdir选项来指定目录的位置。如果未指定, 默认值为tmpdir变量的值。

    五:主从同步起点的说明

    master.info的内容会覆盖命令行或in my.cnf中指定的部分选项。

    如果从服务器启动时master.info文件不存在,选项采用选项文件或命令行中指定的值。首次将服务器作为从服务器启动时,或者已经运行RESET SLAVE然后已经关闭并重启从服务器时会发生。

    如果从服务器启动时master.info文件存在,服务器忽略那些选项。使用master.info文件中发现的值。

    如果你使用与master.info文件中相对应的启动选项的不同的值重启从服务器,启动选项的不同的值不会生效,因为服务器继续使用master.info文件。要想使用启动选项的不同的值,必须删除master.info文件并重启从服务器,或(最好是)在从服务器运行时使用CHANGE MASTER TO语句重新设置值。

    六:如何确保所有从服务器已经处理了中继日志中的所有语句

    在每个从服务器上,发出STOP SLAVE IO_THREAD语句,然后检查SHOW PROCESSLIST语句的输出,直到你看到Has read all relay log。当所有从服务器都执行完这些,它们可以被重新配置为一个新的设置。在被提升为主服务器的从服务器S1上,发出STOP SLAVE和RESET MASTER语句。

    七:如果你确定可以跳过来自主服务器的下一个语句,可以执行下面的语句

以下是代码片段:
mysql> SET GLOBAL SQL_slave_SKIP_COUNTER = n;
mysql> START SLAVE;

    如果来自主服务器的下一个语句不使用AUTO_INCREMENT或LAST_INSERT_ID(),n 值应为1。否则,值应为2。使用AUTO_INCREMENT或LAST_INSERT_ID()的语句使用值2的原因是它们从主服务器的二进制日志中取两个事件。

    七:两个重要的选项:

    1):· --logs-slave-updates

    这个是在my.cnf文件配置的

    通常情况,从服务器从主服务器接收到的更新不记入它的二进制日志。该选项告诉从服务器将其SQL线程执行的更新记入到从服务器自己的二进制日志。为了使该选项生效,还必须用--logs-bin选项启动从服务器以启用二进制日志。如果想要应用链式复制服务器,应使用--logs-slave-updates。例如,可能你想要这样设置:

     A -> B -> C

    也就是说,A为从服务器B的主服务器,B为从服务器C的主服务器。为了能工作,B必须既为主服务器又为从服务器。你必须用--logs-bin启动A和B以启用二进制日志,并且用--logs-slave-updates选项启动B。

    2):· --slave-skip-errors=[err_code1,err_code2,... | all]

    这个是在mysql启动时的选项

    通常情况,当出现错误时复制停止,这样给你一个机会手动解决数据中的不一致性问题。该选项告诉从服务器SQL线程当语句返回任何选项值中所列的错误时继续复制。

    如果你不能完全理解为什么发生错误,则不要使用该选项。如果复制设置和客户程序中没有bug,并且MySQL自身也没有bug,应不会发生停止复制的错误。滥用该选项会使从服务器与主服务器不能保存同步,并且你找不到原因。

    对于错误代码,你应使用从服务器错误日志中错误消息提供的编号和SHOW SLAVE STATUS的输出。服务器错误代码列于附录B:错误代码和消息。

    你也可以(但不应)使用不推荐的all值忽略所有错误消息,不考虑所发生的错误。无需而言,如果使用该值,我们不能保证数据的完整性。在这种情况下,如果从服务器的数据与主服务器上的不相近请不要抱怨(或编写bug报告)。已经警告你了。

    例如:

以下是代码片段:
--slave-skip-errors=1062,1053
--slave-skip-errors=all

    八:二个有用的问与答:

    1)Q:如果主服务器正在运行并且不想停止主服务器,怎样配置一个从服务器?
         A:有多种方法。如果你在某时间点做过主服务器备份并且记录了相应快照的二进制日志名和偏移量(通过SHOW MASTER STATUS命令的输出),采用下面的步骤:

以下是引用片段:
    1.    确保从服务器分配了一个唯一的服务器ID号。
    2.    在从服务器上执行下面的语句,为每个选项填入适当的值:
            mysql> CHANGE MASTER TO
                    ->     MASTER_HOST='master_host_name',
                    ->     MASTER_USER='master_user_name',
                    ->     MASTER_PASSWORD='master_pass',
                    ->     MASTER_LOG_FILE='recorded_log_file_name',
                    ->     MASTER_LOG_POS=recorded_log_position;
    3.    在从服务器上执行START SLAVE语句。

    如果你没有备份主服务器,这里是一个创建备份的快速程序。所有步骤都应该在主服务器主机上执行。

以下是引用片段:
1.    发出该语句:
     mysql> FLUSH TABLES WITH READ LOCK;
2.    仍然加锁时,执行该命令(或它的变体):
     shell> tar zcf /tmp/backup.tar.gz /var/lib/mysql
3.    发出该语句并且确保记录了以后用到的输出:
     mysql>SHOW MASTER STATUS;
4.    释放锁:
     mysql> UNLOCK TABLES;

    一个可选择的方法是,转储主服务器的SQL来代替前面步骤中的二进制复制。要这样做,你可以在主服务器上使用mysqldump --master-data,以后装载SQL转储到到你的从服务器。然而,这比进行二进制复制速度慢。

    不管你使用这两种方法中的那一个,当你有一个快照和记录了日志名与偏移量时,后来根据说明操作。你可以使用相同的快照建立多个从服务器。一旦你拥有主服务器的一个快照,可以等待创建一个从服务器,只要主服务器的二进制日志完整。两个能够等待的时间实际的限制是指在主服务器上保存二进制日志的可用硬盘空间和从服务器同步所用的时间。

    你也可以使用LOAD DATA FROM MASTER。这是一个方便的语句,它传输一个快照到从服务器并且立即调整日志名和偏移量。将来,LOAD DATA FROM MASTER将成为创建从服务器的推荐方法。然而需要注意,它只工作在MyISAM 表上并且可能长时间持有读锁定。它并不象我们希望的那样高效率地执行。如果你有大表,执行FLUSH TABLES WITH READ LOCK语句后,这时首选方法仍然是在主服务器上制作二进制快照。

    2)Q:从服务器需要始终连接到主服务器吗?
         A:不,不需要。从服务器可以宕机或断开连接几个小时甚至几天,重新连接后获得更新信息。例如,你可以在通过拨号的链接上设置主服务器/从服务器关系,其中只是偶尔短时间内进行连接。这意味着,在任何给定时间,从服务器不能保证与主服务器同步除非你执行某些特殊的方法。将来,我们将使用选项来阻塞主服务器直到有一个从服务器同步。

也许您对下面的文章感兴趣:
类别:[随便说说]  时间: 2008-07-10 14:59:43; 浏览: 18418; 评论: 0  

    看见一个很有意思的文章,可以了解牛顿生平。其中对“站在巨人肩膀”的典故的还原让我想起了另外一件事。

    上学的时候,老师家长们常教育的故事一般都有爱迪生的“天才那就是1%的灵感加上99%的汗水”。80年代的同学们,想想你们教室的两边、走廊上是不是有这样的话?但实际上呢,最关键的后面那半句话被人为的删掉了:“但那1%的灵感是最重要的,甚至比那99%的汗水都要重要”。

    优秀的人总是有自豪感的,比如爱因斯坦说“造成这一切悲剧的主要原因,是因为多数人的道德和智慧,与那极少数真正为人类创造价值的人比起来,是无比低下。”

    不禁为智商平平的我感到惭愧、、、、、、

----------------------------- 方便阅读的分割线 -----------------------------

    牛顿悼文原文附后:看了别人的悼文才知道自己有多没才华 转帖牛顿悼文

    3月28号是牛顿的忌日,但是知道的人很少,我们毕竟更关心沈殿霞和张国荣。其实牛顿老师在科学圈里曾经很有权势,被女王封了爵位成了贵族,官至皇家造币局局长兼皇家学会会长。如果阿尔伯特没有辞了以色列总统的话和他有一拼。说他有权势并不仅是官大,主要是贡献大。如果17世纪就有诺贝尔奖的话,牛顿老师至少能连续垄断4届物理学奖(分光计;力学体系的构建;反射望远镜;万有引力),同时为了表彰他在炼金方面的造诣,再奉送他一届化学奖。而且这孙子鼓捣出了流数术,所以菲尔兹数学奖也要给他。要知道,他的这些发现基本都是在26岁以前获得的,30岁以后牛顿就开始玩票了,成天琢磨上帝和炼金,以及怎样把莱布尼茨搞臭,捎带手的把以前的发现整理成书。所以你能想象到他在当时的欧洲是如何的一呼万应,敢跟他叫板的只有莱布尼茨和大主教贝克莱。牛老师死的时候,全英国的名流以给他扶柩为荣,全欧洲的名流蜂拥伦敦。来自法国的傻逼文科生伏尔泰在国葬现场大受刺激,回去就写了首诗,嫉妒之情溢于言表。

    牛顿老师的一生是天才的一生,战斗的一生,也是孤独的一生。一辈子没有朋友,也没有结过婚,很可能到死都是处男,关于牛顿是否处男的问题,由于篇幅过长,我将在另一篇文中论证。当然他肯定不会孤独,因为科学的世界里乐趣无限,快感连连。出乎世俗想象的是,科学其实远比任何娘们儿都风骚,玩科学比玩女人爽得多,得到一个成果所获得的高潮强烈而持久,不仅有快感,更有巨大的自我认同感,远胜于那几秒寒颤之后无边的空虚与落寞。所以陈景润其实是沉溺于美色不能自拔,身体弱架不住高潮过度被爽死了。

    牛顿老师茕茕孑立,形影相吊的原因是多方面的。首先他生性孤傲,自恃高才,瞅谁都是傻逼,当然不会真心跟傻逼交朋友。同时在他眼里人是不分男女的,只有傻逼和巨傻逼两种,所以他对女色没兴趣也就可以理解了。有婚介中心给他介绍过几个名媛,拾掇拾掇都是当王妃的坯子,但一见面就受不了牛顿的牛逼烘烘和不知所云。比如有次相亲,他把姑娘的手指头塞进了烟斗。

    另一方面是外在的,不光他不愿意交朋友,也没有人真正想跟牛顿当朋友,结交他的人都是有目的的。人们对他只有敬畏和仰慕,并不真的喜欢他。这道理其实很浅显,绝大部分人都热衷于跟比自己傻的人待着,很少有人愿意在人精的身边衬托自己的二逼。所以好多人都喜欢小动物和小孩子,就是因为这些东西够傻。不少姑娘一见到小猫小狗小人儿都会迫不及待的搂抱,接踵而至的就是很嗲的说好可爱欧~,听得我阴毛都竖起来了。有时候可爱和憨态可掬的潜台词就是弱智。小猴子也很好玩,喜欢的人就少多了,因为猴子机灵到能戏弄人,那些人没有驾驭猴子的自信。同理,喜欢小孩的都是喜欢他们的单纯与缺心眼,在他们眼里,小孩跟小动物没有本质区别,也都是四条腿走路,露着屁眼随时拉撒。如果遇到一个小天才,3岁就会心算三位数乘法或者知道傻逼二字的正确写法,她们一定会骇破了胆。所以那些喜欢养猫狗的女士们别再标榜自己有爱心了,你们其实比谁都缺德。我从不喜欢猫狗,这是因为我敬畏大自然的生灵而不忍戏弄它们;我也不喜欢小孩,因为我把他们当作一个大写的人而不是小畜生看待。

    大家不喜欢牛顿的另一个原因是他性格暴戾乖张。长年在他身边的人回忆说,牛顿在人前只笑过两回,其中一次还是嘲笑:有人问他,欧几里得的《几何原本》那么老朽,不知道还有什么价值。牛顿闻听放声大笑。而且他人品太差,跟谁都打架。众所周知他从小就有校园暴力的记录,胖子同学不小心踩了他的风车,他抬手就把胖子打哭了,我们的教科书居然说这是他有志气的表现。长大了不以拳脚论高下,他就雇用枪手大骂莱布尼茨,甚至不惜化名亲自去骂,人品至此真是无以复加。莱布尼茨若不是脸皮厚早就跟纳什一样疯了,而且牛顿老师肯定会拍个片子叫《丑陋心灵》继续恶心人家。

    关于牛顿的另一个谎言是他的谦虚,证据就是牛顿老师说过两段著名的话,一段是站在巨人肩膀上,另一段是海边捡石头子。这确实很有迷惑性,我第一次听到后感动的直冒鼻涕泡。但任何话语都是有语境的,巨人肩膀那一句的语境是这样的:胡克其实早就发现了万有引力定律并推导出了正确的公式,但由于数学不好,他只能勉强解释行星绕日的圆周运动,而且他没有认识到支配天体运行的力量其实是普遍存在的,是“万有”的。第谷早在100年前就发现了行星的公转其实是椭圆运动,开普勒甚至提出了行星运动三定律。所以科学界对胡克的成果不太重视。后来数学小狂人牛顿用微积分极其圆满的解决了这个问题并把他提出的力学三条基本定律成功推广到了星系空间,改变了自从亚里士多德以来公认的天地不一的旧观点,被科学界奉为伟大的发现。于是胡克大怒,指责牛顿剽窃了自己的成果。牛顿尖酸刻薄的回敬道:是啊,我他妈还真是站在巨人的肩膀上呢!这本是一句反语,至少不是真的想客气一下。几百年后罗永浩说自己只是站在巨人的肩膀上也是这意思。但后人出于塑造完人的目的,只保留了孤立的原话而去掉了语境,变成了一句彻头彻尾的谦辞。(转帖者注,胡克也就一米五几)

    牛顿老师人品差,不谦虚,没朋友,按现在的说法这是典型的高智商低情商,事业不会成功。但我们也发现,当智商高到一定程度的时候是可以取代情商的。所以那些说自己情商低的所谓天才们,你们没成功只是他妈的还不够聪明而已,怨不着人家情商。要知道牛顿是个遗腹子和早产儿,出生时体重不到5斤,没吃过DHA和 RHA配方的奶粉。亲娘改嫁后跟文盲姥姥度过无聊的童年,没有任何的早期智力开发和学前启蒙,7岁上学以前脑子里空空如也,牛妈妈对他的期望仅仅是认识点字然后回家务农。但是牛顿上中学后已经熟练掌握了拉丁语希腊语西班牙语和英语,然后被推荐进了剑桥,20出头就当了卢卡斯教席的终身教授。

    晚年的牛顿除了升官发财再无其他骄傲之处,而且官迷心窍,没退休一直干到85岁寿终。当然他并没闲着,写了150万字的神学著作,同时一心扑在化学事业上,在家里盖了窑子,拿出年轻时搞物理的劲头玩命试验。但这次他的出发点就错了,总是希望从黄铜和煤渣中提炼出黄金。要知道化学反应只改变分子并不能改变原子,能给原子做变性手术的只能是核反应。他违背了物质不灭的化学定律,所以虾米了。

    最后,说两段悼词。一段是他的墓志铭:伊萨克牛顿爵士,安葬在这里。他以超乎常人的智力,第一个证明了行星的运动与形状;彗星轨道与海洋的潮汐。他孜孜不倦地研究,光线的各种不同的折射角,颜色所产生的种种性质。让人类欢呼,曾经存在过这样一位,伟大的人类之光。另一段是英国诗人写的:自然和自然的规律隐藏在茫茫黑夜之中。上帝说:让牛顿降生吧。于是一片光明。

    不知道为什么,一想到这里,我总是有点感动。

也许您对下面的文章感兴趣:
    很抱歉暂时没有!
类别:[Linux/Unix]  时间: 2008-07-09 13:21:34; 浏览: 199666; 评论: 3  
Tags : crontab Linux

    一:前言

    cron 是一个可以用来根据时间、日期、月份、星期的组合来调度对重复任务的执行的守护进程。简而言之,如果你想让系统自动在你指定的时间执行某命令,你需要了解crontab这个命令。它不是一个单纯的命令,而是引发一个脚本,具体执行的是这个脚本里面的命令。

    在要判定该服务是否在运行,使用 /sbin/service crond status 命令。
    要启动 cron 服务,使用 /sbin/service crond start 命令。
    要停止该服务,使用 /sbin/service crond stop 命令。
    一般推荐你在引导时启动该服务。

    二:了解 cron 任务

    cron 的主配置文件是 /etc/crontab,它包括下面几行:

以下是引用片段:
[root@login mobile]# cat /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
0 3 * * * root /var/cfengine/bin/cfexecd -F

    前四行是用来配置 cron 任务运行环境的变量。SHELL 变量的值告诉系统要使用哪个 shell 环境(在这个例子里是 bash shell);PATH 变量定义用来执行命令的路径。cron 任务的输出被邮寄给 MAILTO 变量定义的用户名。如果 MAILTO 变量被定义为空白字符串(MAILTO=""),电子邮件就不会被寄出。HOME 变量可以用来设置在执行命令或脚本时使用的主目录。

    值得注意的是:

    1:上面的PATH 变量定义用来执行命令的路径,这么一来,如果你在crontab里执行的命令不再这个路径中,请使用命令的全路径,否则crontab并不会为你去寻找。如php命令,你可能是安装到了你指定的路径,那你应该使用which命令找到php命令的全路径。

    2:MAILTO 变量可能会给你带来麻烦,因为它可能会不断的发信,而使你的磁盘臃肿,使用率达到100%,一般是:/var/spool/clientmqueue/ 这个夹,而且里面的文件及其多,并且都是小文件,使用rm命令会提示你文件太多而无法删除,这时你需要了解“ls | xargs rm -f”这个命令的含义。

    与其日积月累,非常的多,甚至会撑爆整个系统。不如每条命令后面进行重定向处理,这是非常必要的: >/dev/null 2>&1 。前提是对 Job 中的命令需要正常输出已经作了一定的处理, 比如追加到某个特定日志文件。

    三:crontab 相关的文件

    如你在 /etc/crontab 文件中所见,它使用 run-parts 脚本来执行 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 目录中的脚本,这些脚本被相应地每小时、每日、每周、或每月执行。这些目录中的文件应该是 shell 脚本。

    如果某 cron 任务需要根据调度来执行,而不是每小时、每日、每周、或每月地执行,它可以被添加到 /etc/cron.d 目录中。该目录中的所有文件使用和 /etc/crontab 中一样的语法。

以下是引用片段:
# record the memory usage of the system every monday
            # at 3:30AM in the file /tmp/meminfo
            30 3 * * mon cat /proc/meminfo >> /tmp/meminfo
            # run custom script the first day of every month at 4:10AM
            10 4 1 * * /root/scripts/backup.sh

    四:crontab命令语法

    格式为:

以下是代码片段:
crontab [ -e [UserName] | -l [UserName] | -r [UserName] | -v [UserName] | File ]

    解释如下:

以下是引用片段:
-e    UserName 编辑用户的 crontab 文件的拷贝,或者,如果一个有效的 UserName 的 crontab 文件不存在则创建一个空的文件进行编辑。当编辑完成后,文件被拷贝到 crontab 目录作为用户的crontab 文件。
-l    UserName 列出用户的 crontab 文件。
-r    UserName 从 crontab 目录除去用户的 crontab 文件。
-v    UserName 列出用户 cron 作业的状态。
File    以File做为crontab的任务列表文件并载入

    五:crontab文件命令使用格式

    /etc/crontab 文件中的每一行都代表一项任务,它的格式是:

以下是代码片段:
minute   hour   day   month   dayofweek   command

    ● minute — 分钟,从 0 到 59 之间的任何整数
    ● hour — 小时,从 0 到 23 之间的任何整数
    ● day — 日期,从 1 到 31 之间的任何整数(如果指定了月份,必须是该月份的有效日期)
    ● month — 月份,从 1 到 12 之间的任何整数(或使用月份的英文简写如 jan、feb 等等)
    ● dayofweek — 星期,从 0 到 7 之间的任何整数,这里的 0 或 7 代表星期日(或使用星期的英文简写如 sun、mon 等等)
    ● command — 要执行的命令(命令可以是 ls /proc >> /tmp/proc 之类的命令,也可以是执行你自行编写的脚本的命令。)

    在以上任何值中,星号(*)可以用来代表所有有效的值。譬如,月份值中的星号意味着在满足其它制约条件后每月都执行该命令。

    整数间的短线(-)指定一个整数范围。譬如,1-4 意味着整数 1、2、3、4。

    用逗号(,)隔开的一系列值指定一个列表。譬如,3, 4, 6, 8 标明这四个指定的整数。

    正斜线(/)可以用来指定间隔频率。在范围后加上 / 意味着在范围内可以跳过 integer。譬如,0-59/2 可以用来在分钟字段定义每两分钟。间隔频率值还可以和星号一起使用。例如,*/3 的值可以用在月份字段中表示每三个月运行一次任务。

    开头为井号(#)的行是注释,不会被处理。

    六:安全性:控制使用 crontab 命令

    /var/adm/cron/cron.allow 和 /var/adm/cron/cron.deny 文件控制哪一个用户可以使用 crontab 命令。root 用户可以创建、编辑或删除这些文件。这些文件的条目是用户登录名称,每个名称占一行。两个文件都不允许空格。如果登录标识和多个的登录名称相关联,这个crontab 命令采用第一个在 /etc/passwd 文件中的登录名称,而不管当前实际使用哪一个登录名称。而且,要允许用户启动 cron 作业,应该使用 chuser 命令将 /etc/security/user 文件中的守护进程属性设置为 TRUE。

    以下关于 cron.allow 文件的一个示例:

以下是引用片段:
root
nick
dee
sarah

    如果 cron.allow 文件存在,只有在文件中出现其登录名称的用户可以使用 crontab 命令。root 用户的登录名必须出现在 cron.allow 文件中,如果这个文件存在的话。系统管理员可以明确的停止一个用户,通过使用 crontab 命令,同时在cron.deny 文件中列出用户的登录名。如果只有 cron.deny 文件存在,任一名称没有出现在这个文件中的用户可以使用 crontab 命令。

    如果以下一个条件成立,用户将不能使用 crontab 命令:

    ● cron.allow 文件和 cron.deny 文件不存在(只允许 root 用户)。 
    ● cron.allow 文件存在,但用户的登录名并不列在其中。 
    ● cron.deny 文件存在,并且用户的登录名列在其中。
    ● 如果 cron.allow 和 cron.deny 文件都不存在,只有被 root 用户授权的人可以用 crontab 命令提交一个作业。

    七:用户与crontab文件的关联

    根用户以外的用户可以使用 crontab 工具来配置 cron 任务。所有用户定义的 crontab 都被保存在 /var/spool/cron 目录中,并使用创建它们的用户身份来执行。要以某用户身份创建一个 crontab 项目,登录为该用户,然后键入 crontab -e 命令,使用由 VISUAL 或 EDITOR 环境变量指定的编辑器来编辑该用户的 crontab。该文件使用的格式和 /etc/crontab 相同。当对 crontab 所做的改变被保存后,该 crontab 文件就会根据该用户名被保存,并写入文件 /var/spool/cron/username 中。

    cron 守护进程每分钟都检查 /etc/crontab 文件、etc/cron.d/ 目录、以及 /var/spool/cron 目录中的改变。如果发现了改变,它们就会被载入内存。这样,当某个 crontab 文件改变后就不必重新启动守护进程了。

    八:示例

    1:拷贝一个名为 mycronjobs 的文件,到 /var/admn/cron/crontabs 目录下,输入以下内容:

以下是代码片段:
crontab mycronjobs

    2:将时间以小时的形式把每个小时写到 console 中,输入:

以下是代码片段:
0 * * * * echo The hour is `date` 。>/dev/console

    3:要在每个星期一、星期三和星期五的 6:30 a.m. 运行 calendar 命令,输入:

以下是代码片段:
30 6 * * 1,3,5 /usr/bin/calendar

    4:要在一年的每一天的 6:30 运行 calendar 命令,输入:

以下是代码片段:
30 6 * * * /usr/bin/calendar

    5:要在八月的每天午夜运行一个称为 maintenance 的脚本,输入:

以下是代码片段:
0 0 * 8 * /u/harry/bin/maintenance

    6:为命令的标准输入定义文本,输入:

以下是代码片段:
0 16 * 12 5 /usr/sbin/wall%HAPPY HOLIDAY!%Remember to turn in your time card.

在 %(百分号)之后定义 wall 命令的标准输入的文本:

HAPPY HOLIDAY!
 
Remember to turn in your time card.

    7:每天早上6点10分

以下是代码片段:
10 6 * * * date

    8:每两个小时  

以下是代码片段:
0 */2 * * * date (solaris 5.8似乎不支持此种写法)

    9:晚上11点到早上8点之间每两个小时,早上8点

以下是代码片段:
0 23-7/2,8 * * * date

    10:每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

以下是代码片段:
0 11 4 * mon-wed date

    九:参考和感谢

    本文参考、大多抄袭了以下文章,特此感谢。

以下是引用片段:
Linux crontab-自动化的任务:http://www.eygle.com/digest/2006/01/hwoto_linux_crontab.html

crontab 命令:http://study.chyangwa.com/IT/AIX/aixcmds1/crontab.htm

Crontab 笔记:http://www.dbanotes.net/techmemo/crontab_tips.html

也许您对下面的文章感兴趣:
  1. [2008-04-15 18:18:19] [翻译]What is Linux? -- 什么是Linux
  2. [2008-04-03 15:35:46] [翻译]What is Linux? -- Linux从这里开始
  3. [2008-03-29 22:56:08] uniq和sort对汉字的识别差异
  4. [2008-01-24 18:53:26] eAccelerator 0.9.5.2 安装
  5. [2008-01-23 10:35:20] cut命令学习
  6. [2008-01-16 15:31:20] linux和freebsd下的路由操作的区别
  7. [2008-01-15 18:49:54] 修改符号链接的属主的方法
  8. [2007-12-21 19:31:50] libeven、memcached、libmemcache安装
  9. [2007-12-04 17:58:27] memcached英文文档学习
  10. [2007-12-05 19:57:35] cgi的写法
  11. [2007-11-06 11:02:43] PHP加速器eAccelerator文档翻译
  12. [2008-08-06 23:22:38] 让你的vim显示颜色
  13. [2008-11-28 22:30:26] SYN Flood攻击、SYN Cookie防御和Linux/FreeBSD的内核参数修改
  14. [2009-02-16 19:40:04] Linux进程的层次关系
类别:[随便说说]  时间: 2008-07-07 22:40:32; 浏览: 69242; 评论: 0  
Tags : 生活 学习
类别:[MySQL学习]  时间: 2008-06-16 20:06:38; 浏览: 25135; 评论: 1  
Tags : away MySQL
类别:[本站点滴]  时间: 2008-06-15 16:38:36; 浏览: 12941; 评论: 0  
类别:[随便说说]  时间: 2008-06-05 19:43:55; 浏览: 50055; 评论: 0  
类别:[随便说说]  时间: 2008-06-03 16:29:50; 浏览: 11307; 评论: 0  
类别:[PHP心得]  时间: 2008-05-16 20:04:48; 浏览: 22378; 评论: 1  
类别:[随便说说]  时间: 2008-04-30 14:51:49; 浏览: 89809; 评论: 1  
Tags : 坚持
[196][7/20][|<][3][4][5][6][7][8][9][10][11][12][>|] | 回页首
© 2004 - 2018 芽雨快跑 - 本页面所有内容,未经芽雨许可,欢迎转载,请注明出处

京ICP备09017802号