2008-01-30

Crontab 笔记【转】

关于 Crontab ,维基百科上的词条 Crontab非常好。可惜这个地址在国内不用代理访问不到。

虽然关于 Crontab 的介绍到处都是,详细读了一遍这个词条,收获还是有的。Crontab 这个名字来自 "chronos",一个古希腊语, "时间"的意思.

常见陷阱

每个SA、DBA 或者是普通的 Unix 用户,在第一次使用 Crontab 的时候都会遇到问题. 运行 Crontab 的常见错误包括如下几种:

1) 出于测试目的新创建了一条 Cron JOB, 时间间隔必须超过两分钟,否则 JOB 将调度不到。如果必须忽略这两分钟的载入配置时间差,可以通过重新启动 Cron Daemon 做到。

2) 从 Crontab 中启动 X Window 程序需要注意的事项:所以要么在程序前初始化 "DISPLAY=:0.0", 要么在应用程序后面追加参数 --display :0.0

3) 命令中的 % 必须做转义处理: \% .我个人的意见是不要在命令行里带这个参数,干脆写到脚本里,然后调度该脚本即可。

其实我倒是认为使用 Crontab 最常见的一个问题往往是因为环境变量不对。经常会看到论坛里有人问:为 什么我的 Crontab 创建了不执行? 准备创建一条 Cron JOB 的时候,很多人都喜欢在命令行下运行一遍,因为这个时候环境变量是随着 Shell 自动带进来,在 Crontab 中则可能因为找不到正确的环境变量,JOB 就不能执行。这个小问题就像出天花,一次教训之后就都记得了。

必须使用的一则技巧

每条 JOB 执行完毕之后,系统会自动将输出发送邮件给当前系统用户。日积月累,非常的多,甚至会撑爆整个系统。所以每条 JOB 命令后面进行重定向处理是非常必要的: >/dev/null 2>&1 。前提是对 Job 中的命令需要正常输出已经作了一定的处理, 比如追加到某个特定日志文件。

附: Crontab 的格式说明如下:

* 逗号(',') 指定列表值。如: "1,3,4,7,8"
* 中横线('-') 指定范围值 如 "1-6", 代表 "1,2,3,4,5,6"
* 星号 ('*') 代表所有可能的值

Linux(开源系统似乎都可以)下还有个 "/" 可以用. 在 Minute 字段上,*/15 表示每 15 分钟执行一次. 而这个特性在商业 Unix ,比如 AIX 上就没有.

# Use the hash sign to prefix a comment # +---------------- minute (0 - 59) # |  +------------- hour (0 - 23) # |  |  +---------- day of month (1 - 31) # |  |  |  +------- month (1 - 12) # |  |  |  |  +---- day of week (0 - 7) (Sunday=0 or 7) # |  |  |  |  | # *  *  *  *  *  command to be executed

2008-01-23

清醒地认识团购【转】

清醒地认识团购!!
--------------------------------------------------------------------------------

看到很多 TX 都喜欢参加团购
但也有很多的团购并没有取得理想的效果
使参加者和组织者都心力憔悴甚至影响相互关系
我把我对于产品价格的构成认识给大家谈谈
希望对大家的团购有所帮助
产品价格的一般简单分类:
出厂价格
直销价格
这是第一层
代理价格
第二层
经销商价格
第三层
批发价格
第四层
零售价格
商场销售价格
第五层
一般地说层数越向下价格越高,每一层都要加入利润进入下一层.
团购就是集团购买
如果你的团购参加的是零售层的那你最多得到批发价格
批发层得到经销商价
到经销商层次可以得到代理价
总代理是在出厂价格的基础上计算
所以一般地说团购不在于参加的人数多少
只在于组织者可以从哪个层次上发起团购
因为在一般的价格政策中,各个层次之间有严格地划分
划分的基础一般是进货量
一般用户几乎没有可能拿到代理价格
如果购买量大有可能从总经销商处出货
理论上越向上价格越低
但实际情况中并不一定如此
如果厂家没有成熟严格的价格政策一切都是不成立的
任何一层都可能存在为了清理库存而进行低于其进货成本的销售
具体销售人员为了完成其销售任务会以接近成本销售
每一层都有可能从上一层获得以销售量进行考核的利润返回,为了追求销售量可能
会低于成本销售
同一层次中也存在为了阻挠其他人进行销售而进行的恶意报价
不同地域由于市场成熟度不同价格政策也不同(南京生产的产品在南京本地价格并
不是最低的)
由于价格体系的复杂性
团购价格永远不会等于最低价
只能是一个相对较低的价格
有时候单独买少量的产品
也会因为种种原因得到最低的价格
团购的参加者要明确认识这一点
组织者要尽量进入价格体系的上层并大量了解价格分布进行大量的价格调查以便获
得较好的价格
建议:
直接和生产厂家联系
合理利用地域差价
合理利用价格政策
不要在较低层暴露要团体购买的意向,可能会导致整个价格体系的保护性措施.切入
点和时机很重要

2008-01-18

史上最经典的失恋安慰【转】

苏(苏格拉底):孩子,为什么悲伤?
失(失恋者):我失恋了。
苏:哦,这很正常。如果失恋了没有悲伤,恋爱大概就没有什么味道。可是,年轻
人,我怎么发现你对失恋的投入甚至比对恋爱的投入还要
倾心呢?
失:到手的葡萄给丢了,这份遗憾,这份失落,您非个中人,怎知其中的酸楚啊。
苏:丢了就是丢了,何不继续向前走去,鲜美的葡萄还有很多。
失:等待,等到海枯石烂,直到她回心转意向我走来。
苏:但这一天也许永远不会到来。你最后会眼睁睁的看着她和另一个人走了去的。
失:那我就用自杀来表示我的诚心。
苏:但如果这样,你不但失去了你的恋人,同时还失去了你自己,你会蒙受双倍的
损失。
失:踩上她一脚如何?我得不到的别人也别想得到。
苏:可这只能使你离她更远,而你本来是想与她更接近的。
失:您说我该怎么办?我可真的很爱她。
苏:真的很爱?
失:是的。
苏:那你当然希望你所爱的人幸福?
失:那是自然。
苏:如果她认为离开你是一种幸福呢?
失:不会的!她曾经跟我说,只有跟我在一起的时候她才感到幸福!
苏:那是曾经,是过去,可她现在并不这么认为。
失:这就是说,她一直在骗我?
苏:不,她一直对你很忠诚。当她爱你的时候,她和你在一起,现在她不爱你,她
就离去了,世界上再没有比这更大的忠诚。如果她不再爱你,
却还装的对你很有情谊,甚至跟你结婚,生子,那才是真正的欺骗呢。
失:可我为她所投入的感情不是白白浪费了吗?谁来补偿我?
苏:不,你的感情从来没有浪费,根本不存在补偿的问题,因为在你付出感情的同
时,她也对你付出了感情,在你给她快乐的时候,她也给了
你快乐。
失:可是,她现在不爱我了,我却还苦苦地爱着她,这多不公平啊!
苏:的确不公平,我是说你对所爱的那个人不公平。本来,爱她是你的权利,但爱
不爱你则是她的权利,而你却想在自己行使权利的时候剥夺
别人行使权利的自由。 这是何等的不公平!
失:可是您看的明明白白,现在痛苦的是我而不是她,是我在为她痛苦。
苏:为她而痛苦?她的日子可能过的很好,不如说是你为自己而痛苦吧。明明是为
自己,却还打着别人的旗号。年轻人,德行可不能丢哟。
失:依您的说法,这一切倒成了我的错?
苏:是的,从一开始你就犯了错。如果你能给她带来幸福,她是不会从你的生活中
离开的,要知道,没有人会逃避幸福。
失:可她连机会都不给我,您说可恶不可恶?
苏:当然可恶。好在你现在已经摆脱了这个可恶的人,你应该感到高兴,孩子。
失:高兴?怎么可能呢,不管怎么说,我是被人给抛弃了这总是叫人感到自卑的。
苏:不,年轻人的身上只能有自豪,不可自卑。要记住,被抛弃的并不是就是不好
的。
失:此话怎讲?
苏:有一次,我在商店看中一套高贵的西服,可谓爱不释手,营业员问我要不要。
你猜我怎么说,我说质地太差,不要!其实,我口袋里
没有钱。年轻人,也许你就是这件被遗弃的西服。
失:您真会安慰人,可惜您还是不能把我从失恋的痛苦中引出。
苏:是的,我很遗憾自己没有这个能力。但,可以向你推荐一位有能力的朋友。
失:谁?
苏:时间,时间是人最伟大的导师,我见过无数被失恋折磨的死去活来的人,是时
间帮助他们抚平了心灵的创伤,并重新为他们选择了
梦中情人,最后他们都享受到了本该属于自己的那份人间快乐。
失:但愿我也有这一天,可我的第一步该从哪里做起呢?
苏:去感谢那个抛弃你的人,为她祝福。
失:为什么?
苏:因为她给了你份忠诚,给了你寻找幸福的新的机会。说完,苏格拉底走了。

2008-01-16

~/.profile、/etc/profile、~/.bash_profile等几个文件的执行过程【bash的启动过程】

关于登录linux时,/etc/profile、 ~/.bash_profile等几个文件的执行过程。

在登录Linux时要执行文件的过程如下:
在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的
~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一个,执行的顺序
为:~/.bash_profile、 ~/.bash_login、 ~/.profile。如果 ~/.bash_profile文
件存在的话,一般还会执行 ~/.bashrc文件。因为在 ~/.bash_profile文件中一般
会有下面的代码:

if [ -f ~/.bashrc ] ; then
 . ./bashrc
           fi
  ~/.bashrc中,一般还会有以下代码:
if [ -f /etc/bashrc ] ; then
 . /bashrc
fi

所以,~/.bashrc会调用 /etc/bashrc文件。最后,在退出shell时,还会执行
~/.bash_logout文件。

执行顺序为:/etc/profile -> (~/.bash_profile | ~/.bash_login |
~/.profile) -> ~/.bashrc ->          /etc/bashrc -> ~/.bash_logout

关于各个文件的作用域,在网上找到了以下说明:
(1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录
时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。

(2)/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被
打开时,该文件被读取。

(3)~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信
息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用
户的. bashrc文件。

(4)~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每
次打开新的shell时,该该文件被读取。

(5)~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件. 另外,
/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的
变量(局部)只能继承 /etc/profile中的变量,他们是"父子"关系。

(6)~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc 是交
互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会
调用后者。

初为项目经理【转】

这一天终于来到了:你从一个一线开发人员被提拔为项目经理。也许你一直在期
盼,也许你心里还忐忑不安,也许这是你的职业发展选择,也许你只是不情愿的答
应老板"试一下"。不管哪种情况,可能你并没有项目和人员管理及领导的教育背景
或者培训经历。
领导和管理(这两者是不同的)远非简单的与Dilbert的老板背道而驰(译者注:
Dilbert 是一个漫画人物,以"拥有"一个"白痴老板"而著称)。当你计划如何做好
项目管理时,考虑采取以下列出的行动。也许你想做的事情很多,但下面的这些建
议会帮助你集中到那些能提高效率(你自己的效率和团队的效率)的事情上。
设立优先级
你要着手的第一件大事很可能就是有意识的设立你作为项目经理的优先级。尽管你
可能因为各种原因还需要很大程度上参与软件的开发,但除此之外,你还有一些新
的职责。很多新任的项目经理都摆脱不了技术的诱惑,以致忽略了项目成员向自己
寻求的帮助。
富有效率的项目经理知道,他们最高优先的就是为项目成员提供服务。这些服务包
括:指导和教育,处理冲突,提供资源,设立项目目标和优先级等等,适当时也要
提供技术指导。我发现,把自己视为为成员工作,而非监工是很有价值的。不管你
正在做或者将要做多重要的事,来你这儿寻求帮助的项目成员应该有"非屏蔽中断"
(译者注:非屏蔽中断是一个硬件术语,此处意即最优先的)优先级。
你第二优先的是让你所在组织的客户满意。作为一个项目经理,如果你不再涉足产
品的一线开发,也许你很少有直接的机会可以让客户满意。但你必须为你的项目成
员创造一个环境,使得他们在这个环境下工作,可以最有效的满足客户的需求。这
是项目经理的一个重要职能。
你第三优先的是你自己的事情。可能是一个与项目有关的技术问题(当然也是你感
兴趣的),也可能是你的老板要你做的某件事。但当这些事与上面两个较高优先级
冲突时,你要做好延后处理的准备。
你最低优先的是那些纯粹取悦你的老板的事情。在一个正常的组织(非Dilbet 式
的组织)中,如果你做好了前面所说的更重要的三件事情,你的老板已经是非常惊
喜了。尽管并非每个人都那么幸运可以在一个"正常"的组织工作,但还是努力做好
这三件最重要的事。把注意力放在尽可能的帮助下属富有效率-- 并且快乐-- 上,
而不是取悦于那些"上面"的人。
分析你的技能差距
初为项目经理,通常你会意识到你在领导和管理技能方面的差距,除非你已经为这
个新职位做了充分准备。你有很强的技术背景,可能这也是提拔你领导技术团队的
一个原因,但你还需要一些其他的技能。你需要客观的评价自己的长处和短处,并
且着手缩小自己的差距。
做软件的人常常被认为缺乏出色的交际能力。你需要加强你的人际处理能,诸如调
解矛盾、说服他人、"推销"自己。你需要应付一些不想应付的场面,比如解雇你的
下属、在进度上"讨价还价"、为争取下属的绩效"吵架"。
伴我开始经理职涯的是倾听(Listening)技能的课程,我觉得很有价值。一线开
发时,往往我们都有过人的精力来表达自己的技术观点。但作为管理人员,更需要
一种包容和聆听的工作风格和交流方式。然后,从"听"的位置走到"说"的位置,你
需要提高你的演讲(Presentation)技能。如果你对在公众场合演讲感到不适,你
需要接受一些专门的演讲培训。这对你今后的工作很有好处。
作为一个项目经理,协调他人的工作、计划和跟踪项目、必要时进行项目回溯并采
取纠正措施等等都是你的职责。可能的话,接受有关项目管理的培训,学习如何设
立优先级、如何主持高效的会议、如何明白无误的沟通等等技能;多看一些项目管
理和风险管理的书籍和杂志,比如Project Management Institute 的月刊《PM
Network》(译者注:你也可以从《PMT 评论》获得大量有价值的软件项目知识)。你
还可以从SWCMM(软件能力成熟度模型)中找到很多有关软件项目管理的有用建议。
定义" 质量"
尽管绝大多数人都认真对待质量,也想生产出优质的产品;但是,有关软件质量的
定义仍存在很大争议,比如高质量是"足够好"还是更为经典的质量观点--"无缺
陷"。为了领导你的团队走向成功彼岸,你需要花些时间和你的下属以及客户一起
来明确,对于他们,质量意味着什么。
你的下属和客户是不同的两帮人,他们很可能对质量没有一致的看法,也就容易抱
有不同的目的。如果客户很强调交货期,那他很可能没有耐心听程序员解释为什么
需要额外的时间去检查每一行代码。如果客户看重的是软件的可靠性,那他在增加
功能和减少Bug之间多半会选择后者。如果客户习惯了老版本的键盘操作,那他很
少会对新的图形操作界面感兴趣。
在我曾经负责的一个项目中,为了更好的了解客户的质量要求,我举办了一次开放
式讨论会(Open Forum),除了项目成员和客户参加外,我还客户的上司们一起来
参加讨论。这次讨论很有价值,因为我们发现很多原有的想法是和客户真正的质量
需求背道而驰的。了解这些想法的差异,使得我们可以把力量集中在让客户满意的
事情上,而不是放在让"开发满意"的事情上。
软件质量通常被理解为合乎规格说明,满足客户需求,以及在文档和代码中尽量少
的缺陷(Defect)等等,这些都是比较"经典"的定义。"六西格码质量" (Six-
sigma Quality,译者注:是一种质量标准及相应的质量管理方法)为缺陷密度
(Defect Density)和/ 或失效率(Frequency of Failure)设定了一个很高的标
准,但是,它没有涉及质量的其他方面,比如交货期、可用性、特性集和性能价格
比等等。无论我们是作为生产者还是消费者,我们都希望产品的质量在所有这些方
面都是尽量高的,但事实上,我们总要在其中做出权衡和选择。
我们在需求阶段就考虑,对于客户哪些质量特性是重要的,并把它们列举出来(比
如,交互性、正确性、易学性等)。然后,我们找来一些关键的客户代表,请他们
对这些质量特性打分。这样,我们就可以掌握哪些质量特性是最主要的,哪些是次
要的,从而就可以有的放矢,为这些质量特性而优化设计。
我听说的更有意思的一种软件质量定义是"客户回来的,但产品没有"(the
customer comes back, but the product does not)。和你的下属以及客户一起
定义合适的质量目标,一旦定义了,则要不遗余力的为达成这些目标而努力。也要
以身作则,以高标准要求自己。记住这句话: "非完美不争取,非卓越不满足"
(Strive for perfection; settle for excellence)。
表彰进步
表扬和奖励项目成员的成绩是很重要的激励方式。你要把建立奖励计划
Recognition Program)视为头等大事,除非你已经有了适当的奖励计划。奖励既
可以是象征性的奖状、证书,也可以是实实在在的奖品和现金。发奖时记得说,
"感谢您的帮助",或者"祝贺您完成了..."。还要记得奖励的范围不要局限在你的
项目组内部,客户代表和一些向你提供特别帮助的项目组外部人员也是要考虑的。
奖励计划不仅需要你投入一小笔钱,也需要你多动动脑,想想以何种方式奖励。和
你的下属多交流,了解他们在乎什么样的奖励。要把奖励活动变成团队文化的一部
分。另外,尝试"隐形"的奖励,让你的下属明白你是真的知晓他们所做的贡献,并
且对此心存感激。
前车之鉴, 后事之师
你负责的项目很可能是半途接手的,而且你的前任做的并不怎么好;或者,虽然是
新项目,但从前有类似的项目完成,当然有成功的,也有失败的。不管是哪种情
形,你作为项目的负责人,应该花些时间分析以往的成功经验和失败教训。你要了
解这些项目曾经出现过什么问题,以此避免自己重蹈覆辙。失败是成功之母,但你
没有太多的机会失败,所以你要多从别人的失败中学习。
不要戴着有色眼镜去看以往的项目,或许某个你不喜欢的家伙出色的完成了他的项
目,你当然可以把这归结为运气或者侥幸,但如果你客观的分析,或许更有助于你
的成功。
你也需要客观的去评价自己完成的一些项目(如果有的话),了解自己的团队究竟
强在哪里,弱在何处。事实上,每个完成的项目都要进行项目回顾(Post-
project Review),有时这种总结式的项目回顾也叫做"开棺验尸"
(Postmortem)。注意项目回顾不是为了追究谁的责任,发现问题、剖析问题是为
了以后做得更好。你可以采取头脑风暴的做法,鼓励项目组成员各抒己见。另外,
这种项目回顾也可以扩展到项目进行中,在每个大的阶段结束时都进行回顾。
除此之外,你需要了解被软件业界普遍认可的最佳实践(Best practice)。在
SteveMcConnell 的《Rapid Development》(Microsoft Press,1996)中介绍了27
个最佳实践和36 个软件开发的"经典"问题。此书曾获Jolt Award,是一个很好的
学习起点。当你想把一些好的方法、工具和流程引入到你的项目中时,其他人可能
会排斥、反对,甚至抵制,而这恰恰是你的职责所在,你要让项目成员明白为什么
要这样做,并且确保他们不折不扣的执行。在你的团队内部,也会产生一些最佳实
践,所以你要采取一些措施,促使在项目成员之间交流和采纳这些实践。
设立改进目标
当你回顾了以往的项目,并且确定了"质量"的含义,你需要设立一些短期的和长期
的改进目标。只要可能,这些目标应该是可以量化的,这样你可以通过一些简单的
指标来衡量自己是否在朝着这些目标前进。
举个例子,你发现以往的项目由于需求多变而经常延后,于是,你可以设立一个半
年的目标,力求将需求的稳定性提高50%。这样的一个目标要求你每周每月做实际
的工作:统计需求的改变数,查明需求的来源和改变的原因,采取措施来控制改
变。这很可能将改变你与那些需求更改者的交往方式。
你的这些目标和指标构成了软件流程改进的一部分。尽管流程改进常被人指责为
"官僚作风"的体现,但事实上,每个团队都能找到一些可以改进的地方。如果你停
留在一贯以来的做事方法上,你最好不要指望能获得比以前更好的结果。
改进流程的原因通常有两个:纠正错误和预防错误。你要把精力集中到威胁或者可
能威胁项目成功的因素上;带领你的团队一起分析你们目前做法的长处和短处,以
及所面临的威胁。
我自己的团队就组织过一次两阶段的头脑风暴练习,以此来确认提高我们的产量和
质量的障碍。在第一阶段,参与者将自己想到的障碍写在即时贴上,每张即时贴写
一个想法;然后,协调者就把这些即时贴收集起来,并进行分类;于是我们得到了
若干大的分类,我们就把这些分类写在一张大的白纸上。
在第二阶段,同样还是这些参与者,针对前面写的障碍,把想到的克服方法写到即
时贴上,并且粘贴到相应的分类上。经过进一步的讨论和分析,我们得以把这些障
碍细化,并且获得了一系列可操作的应对方法。设立可度量的、可争取的目标将集
中你为改进流程而付出的努力。你要和你的队员们一起定期检视改进的结果。记住
流程改进的目的是为了项目和公司的成功,而不是为了满足书本上的条条框框。把
流程改进当成项目来操作,有自己的进度、投入和产出。否则,流程改进总是得不
到应有的重视,最终被琐碎的日常工作而淹没。
不要急于求成
本文所建议的一些做法将帮助你这个项目管理的新手和你的团队取得更大的成功,
随着你每天面临的工作压力,你或许会沦为又一个"苟延残喘"者,但是,你要始终
明白你肩负的一个任务(可能也是你获得成功的机会),那就是形成你的团队文化
和一套做事的方法,这是一个长期的任务。你不可能一下子把想做的事都做到,你
可以根据自己的处境有所选择,从容上路。