我看到这个评论:
“在那里,做了那个,之后我们在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中工作,但稍后做一些坏事。
我觉得很难保护自己,如果我知道自己做错了,那么我就不会这样做了。 这就是说,我试图记住我的一些想法:
我们在开发/舞台/生产系统上对bash提示进行了不同的处理。 “哦,屎,我正在生产?!?!?!
linux机器的一些提示:
alias rm="rm -i" alias mv="mv -i"
我不下床。
如果我没有阅读两次,请点击一次。
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自己。