首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用SIGHUP重新加载服务?

如何使用SIGHUP重新加载服务?
EN

Unix & Linux用户
提问于 2021-04-05 23:54:38
回答 1查看 2K关注 0票数 0

我已经安装了Hachicorp并设置了TLS配置。我现在的目标是让vault.service在更新TLS证书的情况下自动重新加载。

官方的文档说:

tls_key_file (string:,reloads on)-指定证书私钥的路径。它需要一个PEM编码的文件。如果密钥文件是加密的,将提示您在服务器启动时输入密码。当使用SIGHUP重新加载配置时,密码必须在密钥文件之间保持不变。在SIGHUP上,Vault启动时设置的路径将用于重新加载证书;在Vault运行时修改此值对SIGHUP没有任何影响。

这是否意味着当对tls_key_file进行更改时,服务会重新加载自己?还是我应该加入额外的逻辑?

vault.service

代码语言:javascript
复制
[Unit]
After=network.service hostname.service consul-init.service consul.service
Description="Hashicorp Vault - A tool for managing secrets"
Documentation=https://www.vaultproject.io/docs/
StartLimitInterval=200
StartLimitBurst=5

[Service]
User=vault
Group=vault
PermissionsStartOnly=true
ExecStart=/usr/bin/vault server -config="{{vault_server_config_file}}"
ExecReload=/bin/kill -HUP $MAINPID
CapabilityBoundingSet=CAP_SYSLOG CAP_IPC_LOCK
LimitNOFILE=65536
LimitMEMLOCK=infinity
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target

<#>更新

在@Jiri B回答之后,我重新调整了我的设置。

因此,现在vault-agent.service在更新TLS证书时将SIGHUP信号发送到保险库。

代码语言:javascript
复制
template {
  source      = "{{vault_template_dir}}/ca.crt.tpl"
  destination = "{{vault_tls_dir}}/ca.crt"
  command = "pkill --signal SIGHUP vault"
}

vault-agent.service

代码语言:javascript
复制
[Unit]
After=network.service hostname.service
StartLimitInterval=600
StartLimitBurst=5

[Service]
PIDFile=/run/vault-agent.pid
User=vault
Group=vault
ExecStart=/usr/bin/vault agent -config="{{vault_agent_config_file}}"
ExecReload=/bin/kill -HUP $MAINPID
CapabilityBoundingSet=CAP_SYSLOG CAP_IPC_LOCK
NoNewPrivileges=yes
LimitNOFILE=65536
LimitMEMLOCK=infinity
Restart=always
RestartSec=30
StartLimitInterval=600

[Install]
WantedBy=multi-user.target

这很好,而且vault.service正在重新加载。然而,另一个问题出现了。vault.servicevault-agent.service都有相同的用户和组,当证书重新绑定时,应该重新加载它们。似乎保险库特工不是为了捕捉SIGHUB信号而编码的。因此,当这个脚本运行command = "pkill --signal SIGHUP vault"时,vault.service将重新加载并运行。但是,vault-agent.service无法启动。

代码语言:javascript
复制
● vault-agent.service - "Hashicorp Vault - A tool for managing secrets"
     Loaded: loaded (/etc/systemd/system/vault-agent.service; enabled; vendor preset: enabled)
     Active: activating (auto-restart) since Tue 2021-04-06 12:17:26 UTC; 6s ago
       Docs: https://www.vaultproject.io/docs/
    Process: 13482 ExecStart=/usr/bin/vault agent -config=/etc/vault.d/agent.hcl (code=killed, signal=HUP)
   Main PID: 13482 (code=killed, signal=HUP)

对这个问题有什么想法吗?

EN

回答 1

Unix & Linux用户

发布于 2021-04-06 07:02:44

不,这意味着vault进程是用Goland编码的,它能够捕获信号,其中一个信号可以是SIGHUP。当SIGHUP被捕获时,进程将在内部重新加载自己(即。它不会从头开始重新启动它,它只会根据已经存在的参数重新加载自己)。

顺便说一下,您的代码中有一个错误,s/MAINIP/MAINPID

请参阅https://en.wikipedia.org/wiki/Signal_(IPC)

看看在sshd.service中是如何做到的。

代码语言:javascript
复制
systemctl show -p ExecReload -l --no-pager sshd.service
ExecReload={ path=/bin/kill ; argv[]=/bin/kill -HUP $MAINPID ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/643693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档