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

Ste*_*ett 7 scripting resources bash process

我最近有一次编写 shell 脚本的经历,该脚本通过消耗所有资源使服务器崩溃(并损坏了分区)。它连接到一个 cron 作业,运行时间似乎比执行之间的间隔时间更长,随着时间的推移,滚雪球失控。

现在,我已经修改了它以记录其运行状态,并且不会同时运行多次。我的问题是:还有其他简单的方法可以保护脚本免受伤害吗?是否有一个标准的脚本应该做的事情列表,以确保正常运行、不消耗太多资源、优雅地失败、提醒正确的人等?

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

vor*_*aq7 4

计算机完全按照指令行事。确保脚本“正常运行”的唯一方法是编写脚本,使其在所有情况下都能正常运行。

一些基本建议:

  1. 实施某种监控系统。
    事实上,你的系统在你不知道的情况下就爆炸了,这告诉我你要么没有监控系统,要么你当前的系统不够好。
    花一些时间确保您的服务器在崩溃之前告诉您出现了问题。
  2. 在 cron 运行的脚本中包含适当的保护措施。
    你的剧本踩到了自己的尾巴。那不应该发生。
    您已经通过惨痛的教训了解到您需要防范此类事情(并让系统在发生这种情况时通知您)。
  3. 更彻底的设计和测试。
    仔细评估您要部署的每个脚本,以确保它不会产生不良的副作用。如果您可以想象一个失败场景,请对其进行测试(并正确处理它!)。
    花时间模拟故障(通过在脚本中将条件硬编码为 true,或者通过生成环境来测试检测逻辑。