참고 : 간략한 공식 질문은 하단에 있습니다.
파일을 외부 USB 드라이브에 백업하는 스크립트가 있습니다. 내가 만든 새 데이터의 양에 따라 실행하는 데 시간이 걸릴 수 있습니다. 시스템을 종료 할 때마다 자동으로 실행하고 싶습니다.
최신 업데이트 (systemd)와 함께 fedora 23을 사용하고 있습니다.
나는 여러 가지 방법으로 이것을 달성하려고 노력했지만 그것을 작동시키지 못했습니다.
StopExec을 통한 장기 실행 프로세스
자동 백업 서비스 :
[Unit]
Description=Slow backup script
Requires=local-fs.target
[Service]
ExecStart=/bin/true
ExecStop=/etc/systemd/system/do_backup.sh
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multiuser.target
로 활성화하고로 systemctl enable autobackup.service
시작했습니다 systemctl start autobackup.service
.
부팅 로그의 일부 ( journalctl -b-1
) :
Dez 22 17:45:27 localhost systemd[1]: Unmounted /mnt/BACKUP.
Dez 22 17:45:27 localhost do_backup.sh[4296]: At subvol /home/BACKUP.2015_12_22-17_45_25
Dez 22 17:45:27 localhost do_backup.sh[4296]: ERROR: parent subvol is not reachable from inside the root subvol.
Dez 22 17:45:27 localhost do_backup.sh[4296]: At snapshot BACKUP.2015_12_22-17_45_25
Dez 22 17:45:27 localhost do_backup.sh[4296]: ERROR: failed to dump stream. Broken pipe
Dez 22 17:45:27 localhost systemd[1]: autobackup.service: Control process exited, code=exited status=1
Dez 22 17:45:27 localhost systemd[1]: Stopped Slow backup script.
Dez 22 17:45:27 localhost systemd[1]: autobackup.service: Unit entered failed state.
나는 그 사이에 아무것도 줄지 않았으며, 스크립트가 시작되기 직전에 / mnt / BACKUP이 실제로 마운트 해제되었습니다. 재미있는 우연의 일치 ..
종료하기 전에
자동 백업 서비스 :
[Unit]
Description=Slow backup script
DefaultDependencies=no
Before=shutdown.target
[Service]
ExecStart=/etc/systemd/system/do_backup.sh
Type=oneshot
systemctl edit shutdown.target
[Unit]
Requires=autobackup.service
출력은 기본적으로 동일합니다.
문제
문제는 systemd가 BACKUP을 마운트 해제하고 파이프 인프라를 비활성화하는 두 가지 경우에 다른 모든 종료 스크립트와 동시에 스크립트를 시작한다는 것입니다 (언 마운트가 빠르지 않은 경우 때때로 발생하는 또 다른 오류).
질문
시스템 종료시 먼저 스크립트를 시작하고 종료 될 때까지 기다렸다가 나머지 종료 스크립트 / 대상 / 단위 / 무엇을 시작하도록 systemd에 지시 할 수 있습니까?