systemctl 无法从 shellscript 运行但可以从终端运行

systemctl 无法从 shellscript 运行但可以从终端运行

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) 解决了该问题。

相关内容