小编bru*_*tra的帖子

systemd - 依赖于它的服务完成后卸载设备

我正在尝试使用 udev 规则和 systemd 实现一种自动备份机制。这个想法是在热插拔特定存储设备时启动备份例程,与这个问题非常相似,我顺便提供了一个答案,但在这里我有兴趣讨论一些进一步的调整。即我希望在备份服务完成后卸载设备。

一些背景:

到目前为止,我使用 udev 启动了一个 systemd 服务,该服务本身运行一个备份例程。相关文件如下:

备份服务

[Unit]
Description=<DESCRIPTION HERE>
BindsTo=<STORAGE DEVICE UNIT HERE>.device mnt-backup.mount
After=<STORAGE DEVICE UNIT HERE>.device mnt-backup.mount

[Service]
ExecStart=<CALL TO BACKUP SCRIPT HERE>
Run Code Online (Sandbox Code Playgroud)

mnt-backup.mount

[Unit]
DefaultDependencies=no
Conflicts=umount.target
Before=umount.target

[Mount]
What=/dev/disk/by-uuid/<DEVICE UUID HERE> 
Where=/mnt/backup
Type=<FILESYSTEM HERE>
Run Code Online (Sandbox Code Playgroud)

90-backup.rules

KERNEL=="sd*", ATTRS{serial}=="<HD SERIAL HERE>", TAG+="systemd", ENV{SYSTEMD_WANTS}+="backup.service" 
Run Code Online (Sandbox Code Playgroud)

问题:

现在我希望 mnt-backup.mount 在 backup.service 完成后立即停止。

根据文档ExecStartPost=将在 ExecStart= 中的命令之后执行,所以我尝试添加

ExecStartPost=/usr/bin/systemctl stop mnt-backup.mount
Run Code Online (Sandbox Code Playgroud)

到backup.service,即使我意识到它停止了mnt-backup.mount,它本身绑定了它,据我所知,实际上需要在mnt-backup.mount之前停止backup.service才能正常停止,因此产生循环依赖。

在测试这个时,它在我遇到内核恐慌之前运行了几次,这是我在我的机器上看到的第一次,所以它让我想知道这是否是某种原因。

无论如何,我的方法正确吗?

linux udev mount systemd

9
推荐指数
1
解决办法
7562
查看次数

标签 统计

linux ×1

mount ×1

systemd ×1

udev ×1