CentOS Linux Shell脚本问题:命令似乎没有按预期运行

时间:2019-04-09 12:56:32

标签: shell cron

我有一个半私有的Web服务器(例如,只允许特定IP范围内的人使用它,除办公室外其他所有人都被防火墙屏蔽了),我们将其更改为使用“加密”中的证书。对此的身份验证机制与以前的付费SSL产品不同,显然,在挑战期间,考虑到LE证书的寿命很短,Let's Encrypt授权机构必须有权访问服务器,这通常是按计划进行的。

基于这个原因,我编写了一个新的Linux Shell脚本,以确保经过修改的过程可以正常工作。具体来说,在第一次编写时,shell脚本执行了4次操作,我认为这些操作是按绝对/硬顺序进行的:

  1. 停止防火墙
  2. 运行“让我们加密客户端”
  3. 重新启动httpd
  4. 再次启动防火墙。

它曾经可以正常工作,但是今年早些时候该过程按预期停止了工作,特别是让我们加密客户端尝试续订证书失败,并且我收到了来自我们加密的电子邮件警告,证明证书即将过期,我认为这是因为LE权限无法到达服务器(防火墙由于某种原因未停止)。该脚本在Cron作业中被引用,并且被设置为将其结果输出到日志文件中。我已经能够分解工作并手动完成它,有一点它甚至可以自己运行脚本,即我运行它而不是让cron运行它。但是它不会自动运行。

我们使用CentOS 7。

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

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

30 3 * * * /backup/checklecert.sh > /backup/log/checklecert.txt
service firehol stop
certbot renew --renew-by-default
service httpd restart
service firehol start

这些命令应该按顺序运行(即,每个命令都运行,并且系统会等待它完成后再继续执行下一个命令),并且应该可以使所有功能正常工作。

实际发生的情况是我的脚本中似乎只有某些命令在运行,或者它们没有严格按顺序运行。

编辑:看起来我的代码未包含在问题中。 cron文件中用于启动该过程的代码是:

10 20 * * 1 /backup/checklecert.sh > /backup/log/checklecert.txt

“ checklecert.sh”的代码文件为:

service firehol stop
certbot renew --renew-by-default
service httpd restart
service firehol start

1 个答案:

答案 0 :(得分:0)

不建议使用https://github.com/certbot/certbot/issues/6379-默认默认更新。我建议使用shebang cron守护程序,但默认情况下应设置一个shell变量。