在Linux中可以重新进入该进程吗?

在Linux中可以重新进入该进程吗?

我运行了 certbot 程序来为域颁发证书。在程序运行时进行域验证期间,我与服务器的 ssh 会话崩溃了。重新登录服务器后,我想再次执行该命令,但收到一条消息,提示 certbot 实例正在运行。我可以再次进入该进程来完成我开始的工作吗?是否有任何信号可以发送给进程,以便通过按键进入配置的下一阶段?

答案1

这取决于“运行”的含义。

有些程序设置了所谓的“锁定文件“这本质上只是一个他们放在磁盘上的文件,说“我正在做某事,任何人都不应该在这里做任何其他事情。”以便在副本运行时再次运行该程序会出现错误。

如果程序退出时没有清理锁文件(如果 ssh 会话中断则很可能会发生这种情况),那么再次运行它看起来就像有一个实例在运行,但实际上并没有。

您很可能必须清理锁文件并从头开始重新启动该过程。

来自Certbot 锁定文件文档

在处理验证时,Certbot 会在您的系统上写入多个锁定文件,以防止多个实例相互覆盖彼此的更改。这意味着默认情况下,两个 Certbot 实例将无法并行运行。

由于 Certbot 使用的目录是可配置的,Certbot 将为其使用的所有目录编写一个锁定文件。这包括 Certbot 的--work-dir--logs-dir--config-dir。默认情况下,这些分别是/var/lib/letsencrypt/var/log/letsencrypt/etc/letsencrypt。此外,如果您将 Certbot 与 Apache 或 nginx 一起使用,它将锁定该程序的配置文件夹,这些文件夹通常也位于目录中/etc

请注意,这些锁定文件只会阻止其他 Certbot 实例使用这些目录,而不会阻止其他进程。如果您想要同时运行多个 Certbot 实例,则应该为每个要运行的 Certbot 实例指定不同的目录作为--work-dir、和 。--logs-dir--config-dir

LetsEncrypt 论坛帖子Certbot 的另一个实例已在运行建议运行

find / -type f -name ".certbot.lock"

查找所有这些锁定文件。它还有一行“查找并销毁”:

find / -type f -name ".certbot.lock" -exec rm {} \;

答案2

无需准备 – 从技术上来说,使用 是可行的reptyr,但效果并不总是很好。它也不会显示进程已经输出的内容,也就是说,您将无法知道当前显示的提示类型。

最好终止该 certbot 实例(无论如何,一旦操作系统注意到 TCP 连接无响应,这最终都会发生)并从头开始重新启动该过程。

未来,请研究“终端多路复用器”,例如tmuxscreenabduco。它们是设计允许重新连接到多路复用器内部启动的任何类型的进程 - 只要您记得在工作之前启动 tmux。

但理想情况下,certbot 应该能够完成其工作没有任何提示。如果你手动摆弄挑战文件或 DNS 记录——在自身已经是一个问题了,因为你不可能每个月都这么做。

相关内容