systemctl stop tomcat_tomcat9.service
如果我从终端发出上述命令,它可以工作,但如果从 shell 脚本执行,我会出现以下错误。
Invalid unit name "tomcat_tomcat9.service " escaped as "tomcat_tomcat9.service\x0d" (maybe you should use systemd-escape?). Failed to stop tomcat_tomcat9.service\x0d.service: Unit tomcat_tomcat9.service\x0d.service not loaded.
答案1
无效的单元名称“tomcat_tomcat9.service”转义为“tomcat_tomcat9.service\x0d”
意思是 systemd sees(1) 您的服务后跟一个回车符,将光标(<)移动到行首。
tomcat_tomcat9.service
>
原因可能是该脚本是在 Windows 中编写的。某些文本编辑器会在您开始新行时隐藏 \r\n。Systemd 会看到 \r 部分并通知您:
escaped as "tomcat_tomcat9.service\x0d" (maybe you should use systemd-escape?)
解决方法很简单,e "
从末尾删除并输入e"
您的脚本并保存。
如果需要,您可以使用命令 systemd-escape 来测试它:
$ systemd-escape "tomcat_tomcat9.service"
tomcat_tomcat9.service
应该是结果。从 systemd 的角度来看,“”是不需要的。
$ systemd-escape tomcat_tomcat9.service
tomcat_tomcat9.service
即使不带引号,你也会得到相同的输出。
(1)在 servicename 中添加回车符和“ 并换行
user@hostname:~$ systemd-escape -u "tomcat_tomcat9.service
> "
tomcat_tomcat9.service
user@hostname:~$
答案2
我没有对此进行任何测试,但是从您的错误消息中,我非常确信,末尾有一些空格字符,因为它写的是“...service”而不是“...service”。
答案3
我在 Windows 中使用 Notepad++ 编辑 .sh 文件。通过将 EOL 转换(编辑菜单下的选项)更改为 Unix(LF) 解决了该问题。