AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 441894
Accepted
Andreas
Andreas
Asked: 2018-05-05 16:22:33 +0800 CST2018-05-05 16:22:33 +0800 CST 2018-05-05 16:22:33 +0800 CST

等到 USB 驱动器安装后才启动传输守护程序?

  • 772

我在 OSMC 上将传输守护进程作为 systemd 服务运行。在重新启动后打开其远程控制 Web 界面时,所有传输几乎总是停止并显示消息“错误:未找到数据!确保您的驱动器已连接 [...]”。

我假设这是因为传输在下载路径存在之前开始 - 在这种情况下,在系统自动安装的 USB 驱动器上,/media/Elements/[...]无需我进行任何手动配置。我没有编辑fstab。

在尝试了这个答案但没有成功之后,我想知道是否有其他方法可以解决这个问题?我根据该答案所做的是将以下内容添加到override.conf:

cat /etc/systemd/system/transmission.service.d/override.conf

[Unit]
After=media-Elements.mount
After=media-Vault\x2013.mount
After=media-Black\x20Mesa.mount

服务文件:

$ cat /lib/systemd/system/transmission.service

[Unit]
Description=Transmission BitTorrent Daemon
After=udisks-glue.service

[Service]
User=osmc
Group=osmc
Type=notify
ExecStartPre=/bin/sleep 10
ExecStart=/usr/bin/transmission-daemon -f --log-error --allowed *.*.*.*

[Install]
WantedBy=multi-user.target

系统状态:

$ systemctl status transmission

● transmission.service - Transmission BitTorrent Daemon
   Loaded: loaded (/lib/systemd/system/transmission.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/transmission.service.d
           └─override.conf
[...]

值得一提的是,我在每次重启后Warning: transmission.service changed on disk. Run 'systemctl daemon-reload' to reload units.检查状态时都会得到。使其静音,直到下一次重新启动。transmissiondaemon-reload

这个问题是相关的,但与 fstab 挂载有关。如果可能的话,我宁愿在没有 fstab 的情况下解决它,因为我不想将 USB 驱动器视为永久连接。


尝试最初的答案后:

$ systemctl cat --no-pager transmission.service
# Warning: transmission.service changed on disk, the version systemd has loaded is outdated.
# This output shows the current version of the unit's original fragment and drop-in files.
# If fragments or drop-ins were added or removed, they are not properly reflected in this output.
# Run 'systemctl daemon-reload' to reload units.
# /lib/systemd/system/transmission.service
[Unit]
Description=Transmission BitTorrent Daemon
After=udisks-glue.service

[Service]
User=osmc
Group=osmc
Type=notify
ExecStartPre=/bin/sleep 10
ExecStart=/usr/bin/transmission-daemon -f --log-error --allowed *.*.*.*

[Install]
WantedBy=multi-user.target

# /etc/systemd/system/transmission.service.d/override.conf

[Unit]
RequiresMountsFor=/media/Elements

[Install]
WantedBy=media-Elements.mount
systemd services
  • 1 1 个回答
  • 6216 Views

1 个回答

  • Voted
  1. Best Answer
    filbranden
    2018-05-05T21:13:56+08:002018-05-05T21:13:56+08:00

    编辑:事实证明我的第一种方法没有按预期工作。覆盖文件上的一个[Install]部分实际上并不工作,并且RequiresMountsFor=似乎只适用于在 fstab 中声明的挂载。因此,我提出了一个替代方案,它可以实现相同的效果,但使用不同的指令。

    为了防止单元在/media/Elements没有安装卷的情况下启动,请使用ConditionPathIsMountPoint=将检查并阻止单元启动的指令,除非该目录已安装。

    # /etc/systemd/system/transmission.service.d/override.conf
    
    [Unit]
    ConditionPathIsMountPoint=/media/Elements
    

    (注意:您可以使用该systemctl edit transmission.service命令打开此覆盖文件的编辑器。)

    为了transmission.service在 USB 挂载时触发启动,您需要将符号链接添加到.wants/挂载单元的目录。(理想情况下,这将由一个[Install]部分来处理,但它似乎不适用于覆盖文件。)

    使用以下两个命令手动创建它:

    $ sudo mkdir -p /etc/systemd/system/media-Elements.mount.wants/
    $ sudo ln -sf /lib/systemd/system/transmission.service /etc/systemd/system/media-Elements.mount.wants/
    

    就位后,安装/media/Elements并查看传输开始...


    下面的原始答案...

    因此,该After=指令只影响排序,如果两个单元都排队等待启动,那么这个单元将在另一个完成后启动,但不会触发另一个单元的启动。你需要Requires=那个。

    但是对于 mounts,有一个很好的快捷方式RequiresMountsFor=,可以将 mounts 作为路径。

    您可能还需要进行设置,以便在安装 USB 驱动器时启动该设备。您可以通过使用WantedBy=(在该[Install]部分中)并从此处引用该.mount单元来触发它。在设置好并使用systemctl enable创建“通缉”关系后,该单元的启动将(也)在安装 USB 驱动器时触发(如果稍后完成,而不是在启动期间完成。)

    把它们放在一起:

    # /etc/systemd/system/transmission.service.d/override.conf
    
    [Unit]
    RequiresMountsFor=/media/Elements "/media/Vault 13" "/media/Black Mesa"
    
    [Install]
    WantedBy=media-Elements.mount
    WantedBy=media-Vault\x2013.mount
    WantedBy=media-Black\x20Mesa.mount
    

    然后启用这个单元,它将在*.mount.wants/目录下创建符号链接(确切的符号链接名称将打印在systemctl enable输出中):

    # systemctl enable transmission.service
    

    这应该照顾它。

    我不清楚您为什么要列出三个坐骑,因为在您建议的问题文本中仅/media/Elements用于存储传输下载...如果确实如此,您可能会删除其他两个并仅保留参考到“元素”之一。

    (注意:我在发布之前没有对这一切进行测试,但我相当有信心这会奏效。如果由于某种原因它不起作用,请给我留言并提供更多详细信息,我很高兴与您一起解决这出来了。)

    • 11

相关问题

  • 将默认编辑器更改为 vim for _ sudo systemctl edit [unit-file] _

  • systemd:如何在服务启动时运行脚本,而不编辑服务定义

  • 使用 systemd 看门狗支持重新启动应用程序

  • 来自 `service | 的意外结果 grep`

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve