가능하다면 systemd
이 작업을 수행하는 데 이를 사용하고 싶습니다. 이것이 제가 지금까지 한 일입니다.
fish
파일을 준비하고 커밋하고 저장소에 푸시하는 스크립트를 작성했습니다 . 스크립트를 전달할 수 있습니다chmod u+x <script>.fish
.- 서비스 단위를 작성했습니다.
- 다시 로드
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.target
systemd.target그리고systemd.special#shutdown.target.
심볼릭 링크를 변경한 후 서비스를 편집하여 다시 활성화합니다.
systemctl --user reenable backup.service
그런 다음 재부팅하고 다시 종료하여 작동하는지 확인하십시오.