【问题标题】:What does "Failed to execute operation: Invalid argument" mean when running systemctl enable?运行 systemctl enable 时“执行操作失败:参数无效”是什么意思?
【发布时间】:2018-06-19 00:59:14
【问题描述】:

我创建了一个 systemd 服务文件(专门用于 svnserve;我实际上使用的是这里的示例 https://stackoverflow.com/a/40584047/464087),当我启用它时,输入

sudo systemctl enable svnserve

我收到回复

Failed to execute operation: Invalid argument

跑步

sudo systemctl status svnserve

产量

● svnserve.service - Subversion protocol daemon
   Loaded: loaded (/etc/systemd/system/svnserve.service; enabled; vendor preset: enabled)
   Active: inactive (dead)

没有给我任何关于有什么问题的线索。然后我可以启动服务而没有任何错误,它似乎按预期运行,启动 systemctl status 后我仍然不知道有什么问题:

● svnserve.service - Subversion protocol daemon
   Loaded: loaded (/etc/systemd/system/svnserve.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2018-01-09 22:10:14 UTC; 6s ago
  Process: 9677 ExecStart=/usr/bin/svnserve $DAEMON_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 9678 (svnserve)
    Tasks: 1
   Memory: 964.0K
      CPU: 2ms
   CGroup: /system.slice/svnserve.service
           └─9678 /usr/bin/svnserve --daemon --pid-file /run/svnserve/svnserve.pid --root /srv/svn/repos --log-file /var/log/svnserve/svnserve.log

那么这个错误信息是什么意思呢? “无效论点”应该适用于哪一层? svnserve 命令的参数?服务文件中的某些属性? servicectl 命令本身的命令行参数?

FWIW 这是在 Ubuntu 16.04 LTS 服务器上。

【问题讨论】:

  • 我想知道这与运行“sudo systemctl enable svnserve”而不是“sudo systemctl enable svnserve.service”有关,但不,没有区别。

标签: systemd


【解决方案1】:

就我而言,我的 /etc/systemd/system/my-service.service 是一个符号链接:S

【讨论】:

    【解决方案2】:

    我的问题是该服务是指向另一个文件的符号链接。 systemd-analyze 没有发现任何问题,但 systemctl enable 失败。当我删除符号链接并复制文件时,它开始工作了。

    【讨论】:

      【解决方案3】:

      如果您将文件从具有一种编码的系统(例如 Windows)复制/粘贴到另一种编码(例如 linux),则文件编码可能存在问题,或者字符的解释不同。您可以转换文件并重新分析以查看它是否被正确解释。

      1. 运行分析器

      $ sudo systemd-analyze verify yourname.service /etc/systemd/system/yourname.service:1: Assignment outside of section. Ignoring.

      1. 修复服务文件的编码,例如使用 vim (answer from here)

      $ vim +"set nobomb | set fenc=utf8 | x" yourname.service

      1. 编辑文件并删除现在暴露的任何奇怪字符,例如文件的开头。例如它可能有 ^[[200~

      2. 之类的字符
      3. 保存文件并重新启用服务

      $ sudo systemctl enable yourname.service

      【讨论】:

      • sudo systemd-analyze verify yourname.service 是最终导致我发现隐藏问题的原因。就我而言,我在复制粘贴的文件末尾有一些空白。
      • @RobertKearns 太棒了。很高兴它有帮助!
      【解决方案4】:

      所以,我想我们已经有了类似的答案。我只是想说明原因。

      答案:

      cd /etc/systemd/system/multi-user.target.wants/  # it can be other WantedBy item
      ls -lA              # notice that <your>.service is not a link
      rm <your>.service   # remove it
      

      现在试试:

      sudo systemctl enable <your>.service
      

      它应该创建正确的链接并启用您的服务。

      【讨论】:

      • 这里也一样,/etc/systemd/system/multi-user.target.wants/docker.service 不是/ib/systemd/system/docker.service 的符号链接,但它的一些过时的、以前的副本...删除副本是允许sudo systemctl enable ... 现在完成而没有错误的原因。跨度>
      【解决方案5】:

      /etc/systemd/system/youunit.service 文件的最后一行之后,需要CR 符号。 检查它并删除/etc/systemd/system/multi-user.target.wants/youunit.service。 然后再试试systemctl enable youunit

      【讨论】:

        【解决方案6】:

        我还发现了 cmets 的 bug(至少在 systemd 219),如果您在服务文件的任何代码后有注释,它将无法启用它。 所以给新字符串带来评论,或者删除它。 我测试过,它对我有用:

        WantedBy=multi-user.target
        # runs in init 3 (multi-user mode for linux)
        

        这个不行:

        WantedBy=multi-user.target  # runs in init 3 (multi-user mode for linux)
        

        这里有一些讨论:https://github.com/rabbitmq/rabbitmq-server/issues/1422

        【讨论】:

          【解决方案7】:

          我经历了完全相同的事情。删除“别名”是可行的,但实际上,别名可以与服务文件同名。

          它不起作用的原因与放置服务文件的目录有关。

          systemd enable 的作用是在目录“/etc/systemd/system”和需要此服务的目标目录中创建一个别名。如果原始服务文件已经位于“/etc/systemd/system”,当systemd尝试启用该服务时,无法创建别名。

          解决方法是将服务文件放在目录“/lib/systemd/system/”下,就可以了。

          【讨论】:

            【解决方案8】:

            你试试这个,我解决了:

            1. cd /etc/systemd/system/multi-user.target.wants

            2. ls

            3. 查找名称服务错误“执行操作失败:参数无效”

            4. rm -rf yourname.service

            5. cd /etc/systemd/system/

            6. nano yourname.service

            编辑您的内容服务(可能是您的内容错误(检查 symboy [, ],...bla..bla)

            ==> 保存

            1. systemctl daemon-reload

            2. systemctl enable yourname.service

            祝你好运!!!

            【讨论】:

              【解决方案9】:

              我有一个类似的情况,在我的情况下,从 [Install] 部分中删除 Alias 行后问题就消失了。感谢 Anton 在另一个线程中:https://stackoverflow.com/a/34978908/2711456 - 别名的名称可能与服务名称不同。

              【讨论】:

              • 在这上面浪费了几个小时。他们为什么不让错误更清楚......
              猜你喜欢
              • 2017-08-27
              • 2017-05-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多