可能であれば、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
リンクを適用した後のサービス単位ファイルです。回答フレディが提供しました。この回答は次のリンクにリンクされています。もう一つの答えまた、これらの変更を適用しましたが、まだ機能しません。
スクリプトを2つの方法で手動で実行./<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
その後、再起動し、再びシャットダウンして動作することを確認します。