运行systemctl enable时“执行操作失败:参数无效”是什么意思?

时间:2018-01-09 22:28:21

标签: systemd

我已经创建了一个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状态后,我仍然不知道任何错误:

● 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服务器上。

8 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:2)

你试试这个,我解决了它:

  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

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

    ==>保存它

    1. systemctl daemon-reload

    2. systemctl enable yourname.service

    3. 祝你好运!!!

答案 2 :(得分:2)

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

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

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

解决方案是将服务文件放在目录“ / lib / systemd / system /”中,它将起作用。

答案 3 :(得分:2)

我还发现了带有注释的错误(至少在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

答案 4 :(得分:2)

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

答案 5 :(得分:1)

如果您将文件从一种编码方式(例如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

答案 6 :(得分:0)

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

答案:

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

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

答案 7 :(得分:0)

我的情况是,该服务是到另一个文件的符号链接。 systemd-analyze未发现任何问题,但systemctl enable失败。当我删除符号链接并复制文件后,它开始工作。