关机前无法运行 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

TL;DR,尝试这个简化版本:

[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.targetBefore=shutdown.target,请参阅systemd.目标systemd.special#shutdown.target

编辑服务以更改符号链接后重新启用该服务:

systemctl --user reenable backup.service

然后重新启动并再次关机,看看是否有效。

相关内容