如何保护shell脚本免于失控?

我最近有一个编写shell脚本的经验,它通过消耗所有的资源来崩溃一个服务器(并损坏了一个分区)。 它被连接到一个cron的工作,似乎花费更长的时间比处决之间的时间间隔,随着时间的雪球失控。

现在,我已经修改它来logging它的运行状态,而不是同时运行多次。 我的问题是:还有其他简单的方法来保护脚本不致造成伤害吗? 是否有一个标准的脚本应该做的事情应该做的正确的行为,没有消耗太多的资源,优雅地失败,提醒正确的人等?

基本上:我应该避免哪些其他陷阱?

电脑完全按照他们所说的去做。 确保脚本“正确运行”的唯一方法是编写脚本,以便在所有情况下都能正常运行。

一些基本的build议:

  1. 实施某种监控系统。
    事实上,你的系统爆炸,而你不知道它来了告诉我,你要么没有监测系统,要么你现有的系统不够好。
    投入一些时间,确保你的服务器崩溃之前告诉你有问题。
  2. 在从cron运行的脚本中包含适当的安全措施。
    你的脚本踩在自己的尾巴上。 这不应该发生。
    你已经学会了你需要防范这种事情的困难方法(并且如果发生这种情况,系统会通知你)。
  3. devise和testing更彻底。
    仔细评估你要部署的每个脚本,以确保它不会产生不良副作用。 如果你可以想象一个失败的场景,那么testing一下(并且正确处理!)。
    花时间模拟失败(通过在脚本中将条件硬编码为true,或者通过生成环境来testing您的检测逻辑。

你所说的安全措施取决于你的脚本在做什么。 例如,在以自动方式修改重要文件之前备份一些重要的文件会更好。 如果脚本以某种方式失败并损坏了这个重要的文件,那么您是安全的,因为您有备份等等。

重要的一点是日志logging,日志logging 。 如果您的脚本在后台运行,而没有日志文件显示其进展情况以及正在做什么,那么在近期或远期将不会有任何潜在问题。 不要忘记包含每个日志条目的时间标记,并启用NTP服务,确切地知道发生了什么事情。

最后,我们现在在虚拟机里运行脚本。 这大大限制了可能造成的损害范围。

关于Linux的恐惧(至less对我来说)是,轻微的错别字或错误会造成破坏性的影响。 甚至像运行带有$ {VARIABLE}命令的东西,如果该variables是空白的,或者包含一个空格,那么它们可能会有完全不同的(和破坏性的)含义。