종료하기 전에 git 명령을 실행할 수 없습니다

종료하기 전에 git 명령을 실행할 수 없습니다

가능하다면 systemd이 작업을 수행하는 데 이를 사용하고 싶습니다. 이것이 제가 지금까지 한 일입니다.

  1. fish파일을 준비하고 커밋하고 저장소에 푸시하는 스크립트를 작성했습니다 . 스크립트를 전달할 수 있습니다 chmod u+x <script>.fish.
  2. 서비스 단위를 작성했습니다.
  3. 다시 로드 systemctl --user daemon-reload하고 활성화합니다 systemctl --user enable backup.service.

이것은 물고기 스크립트입니다.

#!/usr/bin/fish

set note_dir /home/yjh/Documents/notes

cd $note_dir

set today (date "+(%A) %B-%d-%G %T")

git add . 
git commit -am $today
git push origin master

이것은 서비스 단위 파일입니다.

[Unit]
Description=Backup obsidian notes before shutdown
DefaultDependencies=no
After=network-online.target
Wants=network-online.target
Before=halt.target reboot.target shutdown.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=fish /home/yjh/scripts/backup.fish

[Install]
WantedBy=halt.target reboot.target shutdown.target

링크를 적용한 후의 서비스 단위 파일입니다.답변프레디가 제공했습니다. 이 답변은 다음 링크로 연결됩니다.또 다른 대답또한 이러한 변경 사항을 적용했지만 여전히 작동하지 않습니다.

스크립트를 두 가지 방법으로 수동으로 실행 ./<script>fish하고 이와 같이 systemctl을 통해 실행했으며 systemctl --user start backup.service둘 다 내 코드를 github에 푸시할 수 있습니다. 이 특정 저장소에 대해 SSH를 설정했기 때문에 github에 푸시하려고 할 때 비밀번호나 사용자 이름을 묻는 메시지가 표시되지 않습니다.

답변1

간략하게 설명하자면 다음 단순화된 버전을 사용해 보세요.

[Unit]
Description=Backup obsidian notes before shutdown
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStop=fish /home/yjh/scripts/backup.fish

[Install]
WantedBy=default.target

사용자 서비스로 실행하면 테스트 스크립트가 자동으로 시작되지 않습니다(비활성(죽음)바꾸다활동(종료)). 처음에는 WantedBy=multi-user.target설치 부분에서 사용했습니다. 그러나 이 대상은 halt.target또는 와 같은 사용자 서비스를 실행하는 데 사용할 수 없습니다 reboot.target. 바꾸면 달라져요 WantedBy=default.target, 보세요Systemd 서비스가 시작되지 않았습니다(WantedBy=multi-user.target)..

제거하면 암시 DefaultDependencies=no적 종속성이 추가 Conflicts=shutdown.target되고Before=shutdown.targetsystemd.target그리고systemd.special#shutdown.target.

심볼릭 링크를 변경한 후 서비스를 편집하여 다시 활성화합니다.

systemctl --user reenable backup.service

그런 다음 재부팅하고 다시 종료하여 작동하는지 확인하십시오.

관련 정보