作为程序员,我们倾向于把系统pipe理员视为理所当然。 几次我没有一个好系统pipe理员真的让我很欣赏你们做什么。 当我们冒险进入一个没有系统pipe理员的环境时,你能给我们什么样的智慧呢?
我会开始:
<在此插入大post声明>
其中一些已经被说过,但值得重复。
文档:
logging一切。 如果你没有,请安装一个雷达下的维基,但要确保你已经备份了它。 从收集事实出发,总有一天会形成一个大局面。
为每个逻辑块创build图表并保持更新。 我无法计算准确的networking图或集群图为我节省的次数。
保持每个系统的构build日志,即使它只是复制和粘贴命令来构build它。
在构build系统时,安装和configuration您的应用程序,testing它的工作原理并执行基准testing。 现在,擦拭磁盘。 认真。 “dd”是磁盘前面的第一个兆字节,否则会导致无法启动。 时钟滴答作响:certificate你的文档可以从头开始重build(或者,更好的是,certificate你的同事可以只用你的文档)。 这将形成灾难恢复计划的一半。
现在,您已经完成了灾难恢复计划的前半部分,logging下其余部分; 如何让应用程序的状态恢复(从磁带恢复文件,从转储中重新加载数据库),供应商/支持细节,networking要求,如何以及在哪里获得更换硬件 – 任何你能想到的将有助于你的系统备份。
自动化:
监控:
应用仪器是纯金。 能够观察通过系统的交易使得debugging和故障排除变得更容易。
创build端到端的testing,不仅certificate应用程序是活着的,而且真正做到了应有的。 如果可以插入监控系统以提醒用途,则分是您的。 这是双重责任; 除了certificate应用程序的工作,它使系统升级更容易(监测系统报告绿色,升级工作,回家的时间)。
基准,监测和收集一切都理智的指标。 基准告诉你什么时候能期待什么东西会冒出魔法烟雾。 监控告诉你什么时候有。 指标和统计数据使得通过pipe理获得新的工具包(使用新鲜的魔法烟雾)变得更加容易。
如果您没有监控系统,请实施一个。 奖励积分,如果你真的把杰克上面的端到端testing到它。
安全:
“chmod 777”(又名授予所有访问权限)永远不是解决scheme。
订阅“最低限度”的原则; 如果没有安装,复制或以其他方式存在于磁盘上,则不会受到威胁。 “厨房水槽”操作系统和软件的安装可能会使build设阶段的生活更轻松,但你最终付出了代价。
知道服务器上的每个开放端口是什么。 经常审核,确保没有新的出现。
不要尝试清理受感染的服务器; 它需要从头开始重build。 使用新下载的介质重build到备用服务器,仅从备份中恢复数据(因为二进制文件可能会受到损害),或者将受感染的主机克隆到某处进行分析,以便在同一套件中进行重build。 在这方面有一个完整的法律噩梦,所以如果你需要寻求法律途径的话,那么在保护方面就会犯错。 (注:IANAL)。
硬件:
永远不要假设任何事情都会按照盒子上所说的去做。 certificate它做你所需要的,以防万一。 你会发现自己比所期望的更频繁地说“它几乎工作”。
不要吝啬远程硬件pipe理。 串行控制台和灯光pipe理应视为强制性的。 在超出选项的情况下,远程控制配电盘的奖励分数。
(另外:有三种方法可以在凌晨三点解决问题,一种是温暖的,一种是通过睡衣上的VPN在笔记本电脑上工作,另一种是厚厚的外套和数据中心/办公室的驱动器,我知道哪一个是我的喜欢。)
项目pipe理:
从项目生命周期的第一天开始就将涉及到维护系统的人员。 成套工具和大脑时间的交付时间可以而且会出乎意料,毫无疑问,他们将(应该)具有将成为项目依赖性的标准或要求。
文档是该项目的一部分。 项目closures后系统已经开始维护,你永远不会有时间把整个事情写出来,所以要确保它在开始的时间表中包含在内。
在项目文档中指定的closuresdate前六个月,开始执行刷新周期。
当服务器适合在生产环境中使用时,它们具有确定的生命周期。 这种生命周期的结束通常被定义为每当维修人员开始在年度维护中收取更多费用时,比刷新套件花费更多,或者大约三年(以较短者为准)。 在这段时间之后,他们对于开发/testing环境非常好,但不应该依靠他们来运行业务。 在2年半的时间重新审视环境,让您有足够的时间跳过必要的pipe理和财务环节,以便订购新套件,并在将旧套件发送给天空中的大型供应商之前实施平稳迁移。
发展:
备份
你没有备份的数据是你不想要的数据。 这是一个不变的法则。 确保你的现实符合这一点。
备份比他们看起来更难; 一些文件将被打开或被locking,而另一些文件则需要被静止以寻求恢复,所有这些问题都需要解决。 一些备份软件包有代理或其他方法来处理打开/locking的文件,而其他软件包则不能。 将数据库转储到磁盘并将这些数据作为“静止”的一种forms进行支持,但这不是唯一的方法。
备份是没有价值的,除非他们经过testing。 每隔几个月,从存档中取出一个随机磁带,确保它实际上有数据,并且数据是一致的。
而最重要的是…
select你的失败模式,或墨菲会…墨菲不按你的时间表工作。
devise失败,logging每个系统的devise薄弱点,触发它们以及如何恢复。 当一些事情出错的时候,它会有所作为。
不要以为轻松。 我认识很多程序员,他们认为只是因为他们可以在那里设置IIS或Apache dev box,他们可以运行一个networking农场。 了解工作涉及到什么,并进行研究和规划,不要以为系统pipe理员的工作是十分钟内完成部署应用程序的简单工作。
安全不是事后的想法。 虽然被黑客攻击的应用程序可能会使程序员看起来无能为力,但是至less在丢失的周末中,系统pipe理员正在使用备份进行validation,清理和/或恢复。
对于这个问题,不要把备份视为版本控制。 他们是为了灾难恢复,并没有真正的devise来恢复你的代码,因为你忘了你改变了什么。
并停止盲目地指责Windows更新为您的代码被破坏。 我不在乎它是否奏效,告诉我为什么它现在不起作用 – 那么我们可以看到它是谁的错。
如何debuggingnetworking问题,并观察您的程序与系统pipe理员工具运行。 作为一个开始进行系统pipe理的程序员,我感到惊讶的是,许多程序员在networking“停止”之后变得无能为力。
openssl s_client -connect target-host:port有时),手动连接到networking服务 知道如何解决问题。
推卸责任是非常容易的(例如,你的networking正在与我的数据库沟通)。 这可能是networking的错误,但是你应该有错误的应用程序日志,使用Google或SO,可能会在应用程序的configuration中发现问题。
每个人都喜欢责怪硬件,操作系统或networking,所以如果你多做一点尽职调查,你会让系统pipe理员成为一个快乐的人。 因为,如果没有别的,你可能会指出他们在一个特定的方向,可能是什么错误(而不是说“你的networking吮吸”或什么相同的帮助)。
logging你所能做的一切。 不能告诉你最后一个系统pipe理员有多less次认为不logging“工作安全”或者某人想进出的东西是可爱的。 就像程序员应该留下好评,系统pipe理员应该logging下来。 拓扑图也不错。
计划B.
在devise和开发解决scheme时,始终要考虑灾难恢复计划。 识别可能导致停机的单点故障。
文档:不必疯狂,但应用程序是如何工作的,一个图表显示了这些位如何安装,以及在出错时testing每个组件的方法。 示例数据和输出是很好的。
要求:它依靠什么模块? 版本? OS?
监测:理想情况下开发人员将包括监测信息和testing与应用程序。
说到包装,包装! 没有什么比“部署”更糟,这意味着从VCS中检出文件的新版本并将其复制到一堆服务器上。 程序员经常不喜欢部署软件的复杂性:为什么版本化的打包软件是大多数操作系统的骨干。
如果一个开发者来到我这里,第一次安装了一个简洁,全面的文档和一些Nagiostesting的RPM,他们会成为我最好的朋友。
我感到惊讶的是,迄今为止在这里给出的17个答案中,没有一个包括确保您的应用程序以标准用户身份login时运行的任何内容。
除了安装过程,使用标准用户帐户login应用程序应该运行良好。
备份备份备份….testing备份….始终准备好回滚
这可能只适用于初学程序员,但是我和一些程序员一起处理每个项目的一些事情。
“它在我的机器上运行”并不是一个有效的说法。 程序员有责任创build一个在服务器上使用的安装程序,或者至lesslogging服务器上需要的每个连接,dll和加载项。
(我已经多次听到过,所以请不要笑)我从我的机器运行在服务器上的EXE,它的工作原理。 但是,当我在服务器(思杰,terminal服务器等)上运行它不起作用。 请理解dll和ocx以及您的程序需要的任何内容,以及它们在哪里以及如何注册,以及程序如何使用它们。
这些看起来很简单,但我经常处理它。
布赖恩
好吧,这有点咆哮,但是:
a)编码时,假定基础设施可能失败,而不是来自快乐永远在陆地上。 或Google。
b)我们可能没有足够的资源来执行你所读过的基础设施,所以当事情发生的时候,要轻松一点。 我们很可能知道需要做什么,但是无论出于何种原因,它还没有发生。 我们是你的伙伴!
c)就像上面说的jhs一样,如果你熟悉工具来排除基础设施故障,比如ping,traceroute(或者两者兼而有之),挖掘等等,那么真的会有帮助。甚至可以知道Wireshark。
d)如果你编程一台计算机,你应该知道它是如何连接到networking和基本的,比如能够parsingipconfig / all或者ifconfig的输出。 您应该能够以最less的帮助启动和运行Internet连接。
否则,我认为艾利非常注意它。 谁做一个小系统pipe理员的开发人员是值得他们的黄金重量! 但同样,理解开发者如何去做(包括版本控制等)的系统pipe理员在这个时代是非常重要的。
这似乎是在目前的空气,我已经注意到更多关于在博客dev / ops关系的讨论 – 检查
保持Twitter的Twitter
分隔和战争
在操作中首先testing
没有哪一个组织或者function比另一个更好,也不需要“更大的脑”。 我已经看到双方在对方公司中都performance得很明显 – 你们都试图达到同样的目标 – 关注这些相似之处,而不是使用不同的工具。
基础设施架构师变成了程序员,可能想在未来回滚那个事务:)
作为开发人员的系统pipe理员,以及我自己的开发人员,这里给出的build议不仅是黄金,而且应该成为全新公司的新开发人员的招聘文档的一部分。
我还没有看到(尚未解释)的东西是,开发者真的应该知道他们将用来创build他们所付费用的程序的产品。 我必须解释和configurationapache服务器,eclipse和Visual Studio的次数以及开发者机器上的数据库有点令人担忧。