如何禁用名称以破折号“-”开头的systemd服务
解决systemctl处理以
-开头的服务名解析问题 这个坑我之前踩过!systemctl会把以-开头的字符串当成命令选项来解析,所以你输入"-server"的时候,它会把-s当成一个选项,剩下的erver就成了错误的信号字符串,自然报错。下面给你几个稳妥的解决办法:
方法1:用--分隔选项与服务名
在很多Linux命令里,--是一个特殊标记,用来告诉命令:后面的内容都是位置参数,不是命令选项。用这个方法最直接:
sudo systemctl stop -- "-server"
不管服务名开头有多少个-,这个方法都能让systemctl正确识别服务名。
方法2:直接指定服务文件的绝对路径
systemd的服务文件通常存放在两个位置:自定义服务一般在/etc/systemd/system/,系统自带服务在/usr/lib/systemd/system/。你可以直接用服务文件的绝对路径来操作,完全绕开名称解析的问题:
# 假设你的服务文件在/etc/systemd/system/目录下 sudo systemctl stop /etc/systemd/system/-server.service
方法3:转义开头的破折号(可选,不如前两种可靠)
用反斜杠转义开头的-,让shell把它当成普通字符传递给systemctl:
sudo systemctl stop \-server
不过这个方法受shell解析规则影响,有时候可能出问题,优先推荐前两种。
额外建议:重命名服务(一劳永逸)
如果这个服务需要长期使用,建议直接重命名避免后续麻烦:
# 移动服务文件并重命名 sudo mv /etc/systemd/system/-server.service /etc/systemd/system/my-server.service # 重新加载systemd配置 sudo systemctl daemon-reload
之后你就可以用正常的命令操作了,比如sudo systemctl stop my-server。
内容的提问来源于stack exchange,提问作者Stahp
相关产品推荐
相关产品推荐

