在执行其他任何操作之前,如何让 systemd 启动我的 ZFS 挂载脚本?

duc*_*ck. 8 fedora zfs automounting systemd

现在我在 Fedora 19 上使用 zfsonlinux,它运行良好。使用 systemd 调用的 initscript(包含在 zfs 中)按计划在启动时进行挂载,但有一个非常严重的缺陷:ZFS 挂载方式,在启动过程中太晚了,以至于没有 /zfs 传输和其他服务会非常丢失安装并且无法恢复,因此使它们失败。

我所追求的是一种让 systemd 在做任何其他事情之前启动脚本的方法。我知道如何使用 initscripts(只需将其设置为较低的运行级别,例如 2),但是在使用 systemd 的目标系统执行此操作时,我并不是最迷茫的。

我试过在需要 zfs 启动的服务中设置一些东西,但它不起作用,除非 Type=idle (但无论如何必须有更好的方法):

Requires=network.target
After=zfs
Type=idle
Run Code Online (Sandbox Code Playgroud)

为了参考,这里是 Fedora 提供的 initscript。由于 ZFS 在 linux (?) 上的挂载方式的性质,我不能只是将一个条目放入 fstab 并完成它,它必须使用命令进行挂载。

Bit*_*Nix -2

我会尽力回答,但不太熟悉 systemd。

提供的脚本只是一个标准脚本,因此您始终可以以script_name start.

根据我在 systemd 手册页中看到的内容,您可以定义依赖项,最好的方法是使用 Before 和 After 特定目标。查看这些文件,有一个来自运行级别 2、3 和 4 的别名始终为 multiuser.target。

如果您执行 systemctl list-dependency basic.target 您可以轻松找出您希望服务启动的位置。

[Unit]
Description=my Service
Before=basic.target 
After=local-fs.target

[Service]
Type=simple
ExecStart=/path/to/script start
ExecStop=/path/to/script stop
Run Code Online (Sandbox Code Playgroud)

保存文件示例 /usr/lib/systemd/myservice.service。systemctl 启用 myservice.service。