CentOS Linux shell脚本问题:命令不';I don’我好像没有按预期的那样跑步

CentOS Linux shell脚本问题:命令不';I don’我好像没有按预期的那样跑步,shell,cron,Shell,Cron,我有一个半私有的web服务器(如中所示,只有特定IP范围内的人才允许使用它,除办公室外的所有人都被防火墙隔离),我们将其更改为使用Let's Encrypt中的证书。这方面的身份验证机制不同于以前的付费SSL产品,显然,Let's Encrypt authority必须在质询期间访问服务器,并且由于LE证书的生命周期很短,这通常是在预定的时间内完成的 出于这个原因,我编写了一个新的LinuxShell脚本,以确保修改后的流程能够正常工作。具体来说,当第一次编写shell脚本时,它执行了4个操作,

我有一个半私有的web服务器(如中所示,只有特定IP范围内的人才允许使用它,除办公室外的所有人都被防火墙隔离),我们将其更改为使用Let's Encrypt中的证书。这方面的身份验证机制不同于以前的付费SSL产品,显然,Let's Encrypt authority必须在质询期间访问服务器,并且由于LE证书的生命周期很短,这通常是在预定的时间内完成的

出于这个原因,我编写了一个新的LinuxShell脚本,以确保修改后的流程能够正常工作。具体来说,当第一次编写shell脚本时,它执行了4个操作,我认为它们是绝对/硬顺序的:

  • 停止防火墙
  • 运行Let's Encrypt客户端
  • 重启httpd
  • 再次启动防火墙
  • 它过去工作正常,但今年早些时候,该过程停止工作,正如预期的那样,特别是Let's Encrypt客户端尝试续订证书失败,我收到Let's Encrypt的电子邮件警告,证书即将过期,我认为这是因为LE授权无法到达服务器(防火墙由于某种原因未停止)。此脚本在Cron作业中引用,并设置为将其结果输出到日志文件中。我已经能够将作业分解并手动执行,在某一点上,它甚至可以自己运行脚本,即当我运行脚本时,而不是让Cron运行脚本。但它不会自动运行

    我们使用CentOS 7

    假设这可能是一天中的某个时间,我将Cron中脚本的计划从清晨更改为深夜,今天我发现它运行并更新了证书,但从未重新启动httpd。我还查看了防火墙的服务,它看起来也有一段时间没有重新启动

    也许我在做一些愚蠢的事情,但这看起来像是排序问题。我的脚本中没有任何“hashbang”。Cron中启动该过程的代码行是:

    30 3 * * * /backup/checklecert.sh > /backup/log/checklecert.txt
    
    10 20 * * 1 /backup/checklecert.sh > /backup/log/checklecert.txt
    
    命令应该按顺序运行(即,每个命令都会运行,系统会等待它完成,然后再继续下一个命令),这应该会使一切都按照我的预期工作

    实际发生的情况是,看起来只有脚本中的一些命令在运行,或者它们没有严格按照顺序运行

    编辑:问题中似乎没有包含我的代码。cron文件中用于启动该过程的代码是:

    30 3 * * * /backup/checklecert.sh > /backup/log/checklecert.txt
    
    10 20 * * 1 /backup/checklecert.sh > /backup/log/checklecert.txt
    
    “checkert.sh”的代码文件是:


    不建议使用--renew by default选项。我建议shebang,cron守护进程在默认情况下应该设置一个shell变量。

    脚本没有shebang吗?这不会让cron感到困惑吗?不,它没有shebang。这会有什么不同吗?谢谢tDarkCrystal。我会尝试添加一个shebang,看看是否有效,不是吗n直到今天才知道:}当它正常工作时,我只使用了“续订”,但添加了“强制续订”,以便可以测试更改。我完全打算在一切恢复正常后将其删除。