SIGHUP을 사용하여 서비스를 다시 로드하는 방법은 무엇입니까?

SIGHUP을 사용하여 서비스를 다시 로드하는 방법은 무엇입니까?

Hachicorp Vault를 설치하고 TLS 구성을 설정했습니다. 현재 목표는 vault.serviceTLS 인증서가 업데이트될 때 자동으로 다시 로드하는 것입니다.

공식적인문서상태:

tls_key_file (string: , reloads-on-SIGHUP) – 인증서 개인 키의 경로를 지정합니다. PEM으로 인코딩된 파일이 필요합니다. 키 파일이 암호화된 경우 서버가 시작될 때 비밀번호를 묻는 메시지가 표시됩니다. SIGHUP을 사용하여 구성을 다시 로드할 때 비밀번호는 키 파일 간에 동일하게 유지되어야 합니다. SIGHUP에서는 Vault가 시작될 때 설정된 경로가 인증서를 다시 로드하는 데 사용됩니다. Vault가 실행되는 동안 이 값을 수정해도 SIGHUP에는 영향이 없습니다.

이는 변경 후 서비스가 자체적으로 다시 로드됨을 의미합니까 tls_key_file? 아니면 논리를 추가해야 합니까?

vault.service

[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의 답변 후 설정을 다시 조정했습니다.

따라서 이제 TLS 인증서가 업데이트되면 vault-agent.service신호가 Vault로 전송됩니다.SIGHUP

template {
  source      = "{{vault_template_dir}}/ca.crt.tpl"
  destination = "{{vault_tls_dir}}/ca.crt"
  command = "pkill --signal SIGHUP vault"
}

그리고vault-agent.service

[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.service갖고 있으므로 vault-agent.service인증서가 업데이트되면 다시 로드해야 합니다. 볼트 프록시는 SIGHUB신호를 포착하도록 코딩되지 않은 것 같습니다 . 따라서 스크립트가 실행되면 command = "pkill --signal SIGHUP vault"다시 vault.service로드되어 실행됩니다. 그러나 vault-agent.service시작할 수 없습니다.

● 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)

이 문제에 대한 의견이 있으십니까?

답변1

아니요, 이는 vaultGoland의 프로세스가 신호를 포착하는 방식으로 코딩되었으며 그 중 하나가 SIGHUP일 수 있음을 의미합니다. SIGHUP이 발견되면 프로세스는 내부적으로 자체를 다시 로드합니다. 즉, 처음부터 자체를 다시 시작하지 않고 이미 있는 매개변수에 따라 자체를 다시 로드합니다.

그런데, 코드에 오타가 있습니다 s/MAINIP/MAINPID.

바라보다https://en.wikipedia.org/wiki/Signal_(IPC)

어떻게 완료되었는지 확인하세요 sshd.service.

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 }

관련 정보