mtime 디렉토리는 systemd 타이머를 통해서만 파일을 생성할 때 업데이트되지 않으며, 동일한 명령을 수동으로 실행할 때 제대로 작동합니다.

mtime 디렉토리는 systemd 타이머를 통해서만 파일을 생성할 때 업데이트되지 않으며, 동일한 명령을 수동으로 실행할 때 제대로 작동합니다.

내 프로젝트 데이터베이스를 백업할 수 있는 서비스 단위는 다음과 같습니다.

[Unit]
Description=%i mysql backup for `apples` database
After=mysqld.service
Requires=mysqld.service

[Service]
User=root
EnvironmentFile=/home/site/backend/config/prod/env
ExecStart=bash -c "mysqldump apples | gzip > /home/site/backups/apples.%I.sql.gz && cp /home/site/backups/apples.%I.sql.gz /mnt/cloud/backup/db/apples/%I/apples_$(date +%%Y-%%m-%%d_%%H-%%M-%%S).sql.gz && touch /mnt/cloud/backup/db/apples/%I"
Restart=on-failure
StartLimitInterval=60
StartLimitBurst=3
Type=simple

[Install]
WantedBy=multi-user.target

%I타이머를 통해 매시간, 매일, 매주, 매월( 서비스 내에서) 백업을 실행하는 데 사용됩니다 .

이제 명령을 수동으로 실행하면 ExecStart( %%s 및 %Is를 %및 예를 들어 로 대체 monthly) 생성된 백업이 포함된 디렉터리의 mtime이 예상대로 업데이트됩니다.

한 번에 타이머 중 하나를 실행해도 같은 일이 발생합니다. 잘 작동합니다.systemctl start [email protected]

하지만

특정 시간에 호출되도록 예약된 실제 systemd 타이머가 해당 디렉터리에 백업 파일을 생성할 때 {hourly,daily,weekly,monthly}해당 디렉터리에 대한 mtime은 업데이트되지 않습니다. mtime이 업데이트되었는지 확인하기 위해 호출을 추가했지만 touch어떤 이유로 업데이트되지 않는 것을 볼 수 있습니다. 이 디렉터리에는 예약된 타이머 호출에 의해 생성된 백업 파일에 대한 올바른 mtime이 있는 여러 개의 일일 백업이 있지만 이를 포함하는 디렉터리에는 오래된 mtime이 있습니다.

내 타이머는 다음과 같습니다

[Unit]
Description=%I mysql backup for database `apples`
Requires=mysqld.service
After=mysqld.service

[Timer]
OnCalendar=*-*-* 04:00:00

[Install]
WantedBy=timers.target

/mnt/cloud중요한 경우 WebDAV를 통해 설치하십시오.

자동 백업 모니터링을 설정하려면 이러한 mtime을 업데이트해야 합니다.

무엇이 문제일까요?

답변1

이유는 모르겠지만 전체 ExecStart명령을 스크립트 파일로 옮기면 문제가 해결되었습니다.

ExecStart=/home/site/scripts/backup.sh %I

관련 정보