충돌하는 원샷 서비스를 트리거하는 시스템 타이머 관리

충돌하는 원샷 서비스를 트리거하는 시스템 타이머 관리

저는 물리적 MySQL 백업뿐만 아니라 논리적 MySQL 백업도 수행할 수 있는 서비스를 만드는 작업을 하고 있습니다. 논리적 백업은 4시간마다 수행되고 물리적 백업은 하루에 한 번 특정 시간에 수행됩니다. 둘 다 백업의 기반이 되는 MySQL 슬레이브를 종료하는 데 의존합니다. 또한 동시에 실행되지 않는 것을 처리해야 합니다. 또한 부팅/재부팅 시 첫 번째 호출이 아닌 실행하면 안 됩니다.

논리적 백업이 mysqldumpS3를 사용하고 업로드 중입니다. 물리적 백업은 EBS의 스냅샷을 생성합니다.

나는 둘 다 1분 간격으로 실행되는 간단한 스트레스 케이스 버전을 실행해 왔습니다. 데이터베이스가 비어 있고 작습니다. EBS 볼륨은 1GiB입니다. 두 가지 모두 1분 이내에 완료할 수 있습니다.

타이머 서비스를 사용하여 원샷을 실행합니다. 또한 각 타이머를 Conflicts서로 연결하고 ExecStopPost.

서비스 파일의 예는 다음과 같습니다. 각각은 다른 것을 참조합니다.

[Unit]
After=mysql-slave.service
Conflicts=other-backup-type.timer

[Service]
Type=oneshot
# Just arbitrary name for this example
ExecStart=do_backup.sh
ExecStopPost=/bin/systemctl start other-backup-type.timer

내가 본 것은 systemctl list-timers두 타이머가 모두 동기화되어 있다는 것입니다. 둘 다 0에 도달하면 하나가 트리거됩니다. 내가 찾은 것은 일단 완료되면 다른 것은 실행되지 않는다는 것입니다. 이 경우 타이머는 실제로 정지된 것으로 보이지만, 다른 원샷에 대한 트리거는 전혀 만들어지지 않습니다.

시간을 상쇄하지 않고도 이를 적절하게 처리할 수 있는 방법이 있습니까? 기간 오프셋을 약간만 설정하면 작동한다는 것을 알았습니다(초는 60의 요소가 될 수 없음). 이를 지원하는 더 나은/더 우아한 방법이 있는지 확인하고 있습니다.

답변1

이것이 100% 정답인지는 확실하지 않습니다. 나는 많은 순열을 거쳐 이것을 바탕으로 이것을 생각해 냈습니다.

관찰상으로, 2개의 타이머(A와 B)가 설정되어 있고 Conflicts=만료 시 다른 타이머와 충돌이 있는 경우(예: 두 타이머 모두 1분마다 트리거하도록 설정) 트리거되는 타이머(A라고 가정해 보겠습니다.) ) 먼저 다른 서비스를 중지한 다음 해당 서비스를 트리거합니다. 그러나 이 중지로 인해 타이머 B의 서비스가 손실됩니다. 나는 방아쇠가 어떤 대기열에서 당겨져 중지 과정에서 던져지게 되는 것으로 추측하고 있습니다.

관련 정보