From 8c1eafe615a14f52cf687bdbe1c494472a7fc1c0 Mon Sep 17 00:00:00 2001 From: Hexeong <123macanic@naver.com> Date: Wed, 26 Aug 2026 00:35:58 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EB=A7=88=EC=9A=B4=ED=8A=B8=20=EC=9D=98?= =?UTF-8?q?=EC=A1=B4=EC=84=B1=EC=9D=84=20RequiresMountsFor=20=EB=A1=9C=20?= =?UTF-8?q?=EC=84=A0=EC=96=B8=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit install 이 systemd-analyze verify 에서 실패했다. mysql-backup-dump.service: Failed to create mysql-backup-dump.service/start: Unit mnt-mysql\x2ddata.mount not found. 해당 마운트 유닛은 실제로 존재하고 active 다. fstab 항목을 systemd-fstab-generator 가 /run/systemd/generator 에 만드는데, systemd-analyze verify 는 파일 경로를 받으면 제한된 검색 경로만 보고 generator 산출물을 보지 않기 때문에 찾지 못한다. RequiresMountsFor 는 경로에서 마운트 유닛을 유도해 Requires 와 After 를 함께 걸어 주므로 의존성 보장은 같고 검증만 통과한다. 같은 레포의 mysql_setup.sh.tftpl 이 docker drop-in 에 이미 쓰는 방식이다. DB EC2 에서 두 방식을 비교해 확인했다. Requires=... mnt-mysql\x2ddata.mount -> exit 1 (not found) RequiresMountsFor=/mnt/mysql-data -> exit 0 Refs #66 Co-Authored-By: Claude Opus 5 --- scripts/mysql_backup/systemd/mysql-backup-binlog.service | 9 +++++++-- scripts/mysql_backup/systemd/mysql-backup-dump.service | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/scripts/mysql_backup/systemd/mysql-backup-binlog.service b/scripts/mysql_backup/systemd/mysql-backup-binlog.service index 3f89b67..789a833 100644 --- a/scripts/mysql_backup/systemd/mysql-backup-binlog.service +++ b/scripts/mysql_backup/systemd/mysql-backup-binlog.service @@ -1,8 +1,13 @@ [Unit] Description=Rotate and upload closed MySQL binary logs to S3 -Requires=docker.service mnt-mysql\x2ddata.mount -After=docker.service mnt-mysql\x2ddata.mount network-online.target +Requires=docker.service +After=docker.service network-online.target Wants=network-online.target +# 마운트 유닛 이름을 직접 참조하면 systemd-analyze verify 가 찾지 못해 설치가 중단됩니다. +# fstab 항목은 systemd-fstab-generator 가 /run/systemd/generator 에 만들고, +# verify 는 그 산출물을 보지 않기 때문입니다. +# RequiresMountsFor 는 경로에서 마운트 유닛을 유도해 Requires 와 After 를 함께 걸어 줍니다. +RequiresMountsFor=/mnt/mysql-data [Service] Type=oneshot diff --git a/scripts/mysql_backup/systemd/mysql-backup-dump.service b/scripts/mysql_backup/systemd/mysql-backup-dump.service index 1b0d8d6..46972c5 100644 --- a/scripts/mysql_backup/systemd/mysql-backup-dump.service +++ b/scripts/mysql_backup/systemd/mysql-backup-dump.service @@ -1,8 +1,13 @@ [Unit] Description=Upload a consistent MySQL dump to S3 -Requires=docker.service mnt-mysql\x2ddata.mount -After=docker.service mnt-mysql\x2ddata.mount network-online.target +Requires=docker.service +After=docker.service network-online.target Wants=network-online.target +# 마운트 유닛 이름을 직접 참조하면 systemd-analyze verify 가 찾지 못해 설치가 중단됩니다. +# fstab 항목은 systemd-fstab-generator 가 /run/systemd/generator 에 만들고, +# verify 는 그 산출물을 보지 않기 때문입니다. +# RequiresMountsFor 는 경로에서 마운트 유닛을 유도해 Requires 와 After 를 함께 걸어 줍니다. +RequiresMountsFor=/mnt/mysql-data # TimeoutStartSec와 재시도 간격을 포함한 네 번의 시작을 하나의 제한 구간으로 묶습니다. StartLimitIntervalSec=12h StartLimitBurst=4