你做什么来防止愚蠢的错误?

我看到这个评论:

“在那里,做了那个,之后我们在solaris-boxes上使用了killall-command:alias killall ='echo ORLLY? =) – 凯恩司令5月28日12:03“

回答一个答案 。

这让我想知道,系统pipe理员为了防止自己或他人的愚蠢错误做了什么?

在以前的组织中, 每次更改都必须经历更改pipe理(即使将主机添加到/ etc / hosts),我们也会为所有更改logging复制/粘贴指示信息。 如果需要其他不在logging中的命令/程序,则打开一张新票。

惊讶的没有人增加了…当你累了回家! 大脑在10到12个小时的白天就不能完成最好的工作,回家,拿起啤酒,闭上眼睛,早上起来跑到地面!

我也发现“同行评议”很有用……“嘿,鲍勃,我只是想扯淡,你看到什么了吗? 只要大声说出来,就可以巩固你在想什么。

现在我们回到“单一的,疲惫的大脑的技术解决scheme”;)

我没有做任何事情来阻止他们,而是围绕着我一定会制造可怕的期望的计划。

只是不要犯一个明显指出或解释在文件中的错误…这是一个很好的build议: 阅读文档第一

我从我的木匠freinds的格言…

测量一次两次。

在做可能导致我失业的事情之前,

想想两次运行一次。

我坚决反对像rm =“rm -i”这样的保护性别名。

一旦你重新训练你的大脑,期望rm是安全的,那么在没有这些保护的任何机器上你将变得非常危险。 我更愿意训练我的手指键入“rm -i”或者只是使用mv而不是rm,因为那些在新的环境中不会让我陷入麻烦。

其中,这些可能是有价值的:

alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' alias mysql='mysql --safe-updates' (or add to your .my.cnf) set -o noclobber 

另外,如果您经常浏览数据库,但不经常进行大量更改,请创build一个单独的用户,该用户只能在表上拥有SELECT权限。

许多命令有一个选项,只是显示输出,就好像命令已经运行一样,但实际上并没有这样做。 (例如rsync –dry-run)查找它们,然后使用它们。

自动化任何你可以。 无论何时你依靠自己手动做某件事情,都会犯错误的可能性。

使用各种技术编写健壮的shell脚本 。

在准备一个批处理作业(for循环, clusterssh作业等)时,首先需要使用echo的命令,以确保它们看起来很健全。

清单和脚本

对于每一个复杂的任务,都有一个清单或脚本来保存你的屁股。

如果外科医生和航空公司的飞行员足够好,这对我们来说已经足够了。

当真的很重要的时候,我会在一个星期前坐下来,把所有的东西写在一个维基页面上。 目的是剪切和粘贴整个行动,没有一个实时编辑。 基本上,写一个脚本,但与一个人能够中止并重新开始任何行动。

第二天,我读了它并修复它。

第二天,我再读一遍,并修复它。

第二天,我再读一遍,并修复它。

在真正的执行前2-3天,我在一台可以搞砸的机器上运行一次。 从头开始,我搞砸的一台机器。 然后我修复它的维基页面。

第二天,我再读一遍,并修复它。

在实际执行date,我在第一个生产系统上运行它。 然后我修复了这个wiki页面。

第二个生产系统通常没有问题。

使用示例:从旧SAN迁移到新SAN,无需停机。 包括“热”光纤通道电缆迁移。

它吸了。 但是,当我把它拉下来时,真是太急了!

如果您不知道自己在做什么,请雇用其他人来做,而不是自己想办法。

我们有一个策略,只编辑系统configuration,并在编辑之前先使用备份configuration文件的脚本。 它基本上是围绕vi的一个包装,但它做得很好:即使是最复杂的变化也很容易回滚。

在做任何事情之前,我都要小心地具体说明自己在做什么。 编写一个脚本删除当前工作目录中的所有文件,例如可以在我的testing中工作,但稍后做一些坏事。

我觉得很难保护自己,如果我知道自己做错了,那么我就不会这样做了。 这就是说,我试图记住我的一些想法:

  1. 在尝试任务之前请仔细阅读说明。 这有时很难,因为谁真的喜欢说明?
  2. 阅读所有提示。 如果有一个提示,它是为了一个目的而devise的..阅读这些,而不是通过点击冲,肯定救了我几荷马DOH! 时刻。
  3. logging困难的任务。 大多数时候,当我完成一些新的,具有挑战性的,以前没有logging的时候,我会花时间写一些关于这个任务的笔记。
  4. 备份

我们在开发/舞台/生产系统上对bash提示进行了不同的处理。 “哦,屎,我正在生产?!?!?!

linux机器的一些提示:

 alias rm="rm -i" alias mv="mv -i" 
  • 禁用ctrl-alt-delete
  • 安装molly-guard:保护远程机器免于意外关机/重启
  • 安装metche:configuration监视器来简化集体pipe理

我不下床。

如果我没有阅读两次,请点击一次。

logging你所做的所有事情,当你必须重做任务时,可以稍后将其用作脚本。 同行评审。 仔细检查并使用舞台机器来testing你想要做/改变的东西。在某些版本控制系统下自动configuration相关的所有configuration。

最重要的是“不要怕犯错误 – 你会做的”。 大多数情况下,这会让你更容易工作。 错误会发生,只是准备好,能够很好地清理错误。

由于我太小白皮书评论[ 你做什么来防止愚蠢的错误? ,我必须发表另一个答案。

这是我如何着色各种命令提示符:$ cat〜/ .bashrc

 export FGGRAY=37 export BGRED=41 export BGYELLOW=43 export BGGREEN=42 export HIGHLIGHT=01 export NORMAL=00 export PS1="[\u@\[\e[${FGGRAY};${BGRED};${HIGHLIGHT}m\]\h\[\e[${NORMAL}m\] \W]\\$ " 

$ cat〜/ .cshrc

 setenv FGGRAY 37 setenv BGRED 41 setenv BGYELLOW 43 setenv BGGREEN 42 setenv HIGHLIGHT 01 setenv NORMAL 00 setenv ESC "^[" set prompt = "[%n@%{${ESC}[${FGGRAY};${BGRED};${HIGHLIGHT}m%}%m%{${ESC}[${NORMAL}m%} %~]%# " 

我花了很多时间让这些提示工作,并且有些可读性。 命名颜色可以很容易地将系统从生产阶段转换到分阶段和后退阶段(因为我们的分段机在betatesting周期中变成了“生产”,这是问题的一部分)。

敏锐的读者会注意到,我正在使用ANSI转义序列,无处不在。 他们在RedHat上工作得很好,但是我没有testing过其他的操作系统。

[1]:特雷的回答关于上面的彩色提示

当你感到疲倦时,不要在敏感的事物上工作!

到目前为止,最普遍的做法是设置alias rm="rm -i"alias mv="mv -i"

在最重要的configuration文件和login脚本上进行自动化版本控制,因此所有内容都保持可跟踪性。

我想这真的取决于你的业务。 在我以前的文章中,作为Jr. Linux系统pipe理员,任何事情都不好是非常糟糕的。 我们有依赖于事物的客户,在保护/保存代码方面做得不好的程序员,以及其他部门的人员搞乱了他们无权触及的事情。

在我目前的情况下,错误不是非常糟糕。 前些日子,我的老板不小心把错误的目录写了出来。 重写脚本是一种痛苦吗? 你打赌。 我们损失了多less钱? 不。

我所能说的只是按照前面提到的口号:三思,做一次。 而且,因为我们都知道并不总是有效的,所以有一些恢复计划。 就我个人而言,我是一个Rsync'd目录的粉丝,每晚保存所有重要的文件,但这是因为它对我有用。 其他人可能需要更频繁的备份解决scheme。

除了列出的许多东西,我用Zsh作为我的shell。

 / var / lib / mysql%rm ib_ *
 zsh:确定要删除/ var / lib / mysql [yn]中的所有文件?  ñ

一些明智而危险的任务是成对的,而不是单独的。 尽可能使用GNU屏幕 ,所以同一个terminal由两个pipe理员共同工作。

例如,当我离开服务器300多公里远时,有一个RAID磁盘出现故障,现场pipe理员也不太安全。 他正确地识别并更换了故障磁盘,但却害怕处理与RAID命令行pipe理界面(称为afacli)的野兽。 对他来说这是一个严峻的局面:arrays退化意味着如果另一个磁盘失败严重的数据丢失将随之而来。

于是,我们join了一个共享的屏幕会话,我看着他发出设置新磁盘的命令作为回退,然后看着RAID在新磁盘中重build自己。