systemd는 SIGTERM을 사용하여 프로세스와 하위 프로세스를 종료합니다.

systemd는 SIGTERM을 사용하여 프로세스와 하위 프로세스를 종료합니다.

안녕하세요, 내 프로세스(및 그 하위 프로세스)가 a를 수신 SIGTERM하고 보낸 사람이 (PID == 1)인 경우 systemd매우 이상한 상황이 발생합니다 . 내 설정은 다음과 같습니다.

  • /opt/a두 개의 "시메트릭" 파티션이 및 에 설치됩니다 /mnt/a. 하나는 기본 파티션이고 다른 하나는 보조 파티션입니다.
  • 특정 조건에서 일부 아카이브를 다운로드하고 bash 스크립트를 실행하여 이를 설치하는 실행 중인 systemd서비스 단위(에서 실행 가능 )/opt/a/bin/my_exe.deb
  • package 에서 참조되는 파일 계층 구조로 인해 /opt/a스크립트는 인스턴스를 시작하고 unshareon의 바인드 마운트를 수행하며 패키지 설치를 호출합니다./mnt/a/opt/adpkg
#!/bin/bash
DEB_PKG="$1"
unshare -m /bin/bash <<-EOF
    mount --bind /mnt/a /opt/a
    dpkg -i --admindir=/opt/a/var/lib/dpkg "\$DEB_PKG"
EOF

글쎄, 실행 파일을 설치하는 .deb 패키지에 대해 스크립트가 호출되면 a가 스크립트로 전송되어 실행되는 것을 확인했습니다 /opt/a/bin/my_exe. 다른 systemd모든 패키지의 경우 오류 없이 설치가 완료됩니다. 또한 수동으로 시작하면 모든 것이 정상입니다. 어떤 이유에서인지 문제를 일으키는 패키지의 특정 단계가 마음에 들지 않는 것 같지만 다음과 같습니다.SIGTERMmy_exe/opt/a/bin/my_exesystemdpostinst

  • 나는 그것이 어떻게 그들을 가로채는지 모릅니다.
  • 설치는 다른 파티션에서 수행됩니다.

스크립트는 모든 패키지에서 postinst동일합니다 .

while IFS=' ' read -r f
do
    if [[ -e "$f" && "$f" == /opt/a/* ]]; then
        chown -h obs.obs $f
    fi
done < "$DPKG_ADMINDIR"/info/$DPKG_MAINTSCRIPT_PACKAGE.list

편집: 다음은 시스템 .service파일입니다(매우 간단함).

[Unit]
Description=Extensible and configurable updater manager.

[Service]
ExecStart=/opt/a/bin/my_exe -c /opt/a/etc/config.ini
User=obs
Group=obs
Restart=on-failure
RestartSec=30

[Install]
WantedBy=multi-user.target

EDIT2: 추가 조사 결과 실행 중인 서비스의 실행 파일이 .deb패키지 설치로 대체된 것으로 나타났습니다 SIGTERM. 따라서 systemd는 대체된 실행 파일이 실행 중인 프로세스의 실행 파일이지 다른 실행 파일이 아니라고 생각하는 것 같습니다. 분할. 어떻게 이럴 수있어? 바인드 마운트는 개인 마운트 네임스페이스에서 수행되며 그 안에서 /opt/a참조되어야 합니다 /mnt/a. 내 쉘에 바인드 마운트가 표시되지 않는 것을 확인했습니다.

$ findmnt | grep "/opt/a"
|-/opt/a                            /dev/sda6          ext4     rw,relatime,sync,data=ordered

다음에 의해 생성된 마운트 네임스페이스 내부에 바인드 마운트가 표시되면 unshare:

# nsenter -m -t $(pidof update_script.sh) /bin/bash
# findmnt | grep "/opt/a"
|-/opt/a                            /dev/sda6          ext4     rw,relatime,sync,data=ordered
| `-/opt/a                          /dev/sda5          ext4     rw,relatime,sync,data=ordered

관련 정보