我有以下(匿名)systemd 脚本,名为 tomcat-autostart.service,存储在“/usr/lib/systemd/system/tomcat-autostart.service”中
[Unit]
Description=Tomcat Autostart Script
Requires=var-www-projects.mount
After=var-www-projects.mount
[Service]
Type=forking
ExecStart=/usr/bin/tomcat-autostart start
ExecStop=/usr/bin/tomcat-autostart stop
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
运行后
sudo systemctl daemon-reload
sudo systemctl enable tomcat-autostart.service
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:
Failed to execute operation: Bad message
Run Code Online (Sandbox Code Playgroud)
我还在 /var/log/messages 中得到以下输出
Feb 17 11:29:53 cheese systemd: [/usr/lib/systemd/system/tomcat-autostart.service:1] Assignment outside of section. Ignoring.
Feb 17 11:29:53 cheese systemd: tomcat-autostart.service lacks both ExecStart= and ExecStop= setting. Refusing.
Feb 17 11:29:53 cheese systemd: [/usr/lib/systemd/system/tomcat-autostart.service:1] Missing '='.
Feb 17 11:29:53 cheese systemd: [/usr/lib/systemd/system/tomcat-autostart.service:1] Missing '='.
Run Code Online (Sandbox Code Playgroud)
我让它工作了一段时间,然后我在“[Unit]”行上方添加了一些注释,然后它停止工作了。然后我删除了注释,并且可能无意中修改了脚本中的其他内容,此后我无法让它再次运行。
它似乎以自己的矛盾为乐。第一条错误消息表明第一行有一个赋值(“[Unit]”),第三条错误消息表明该赋值缺少“=”符号。所以基本上,“[Unit]”是一个赋值,只不过它不是因为它缺少“=”符号。
搜索该问题已确定第二条错误消息是其他错误消息的直接原因。因为它忽略节标题,所以它永远不会读取 ExecStart 和 …