我已经创建了一个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服务器上。
答案 0 :(得分:10)
我有类似的情况,在我的情况下,从[Install]部分删除Alias行后问题消失了。感谢Anton在另一个帖子中:https://stackoverflow.com/a/34978908/2711456 - 别名'名称可能与服务名称不同。
答案 1 :(得分:2)
你试试这个,我解决了它:
cd /etc/systemd/system/multi-user.target.wants
LS
查找名称服务错误"执行操作失败:参数无效"
rm -rf yourname.service
cd / etc / systemd / system /
nano yourname.service
编辑您的内容服务(可能是您的内容错误(检查symboy [,],... bla..bla)
==>保存它
systemctl daemon-reload
systemctl enable yourname.service
答案 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),则文件编码可能存在问题,或者字符的解释方式有所不同。您可以转换文件并重新分析以查看其解释是否正确。
$ sudo systemd-analyze verify yourname.service
/etc/systemd/system/yourname.service:1: Assignment outside of section. Ignoring.
$ vim +"set nobomb | set fenc=utf8 | x" yourname.service
编辑文件并删除现在在(例如)文件的开始。例如它可能包含^[[200~
保存文件并重新启用服务
$ 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
失败。当我删除符号链接并复制文件后,它开始工作。