2017-02-16 20 views
0

我都存储在 “/usr/lib/systemd/system/tomcat-autostart.service”systemd脚本:在部分之外进行分配;缺少 '='

[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 

以下(匿名)systemd称为Tomcat的autostart.service脚本,运行

sudo systemctl daemon-reload 
sudo systemctl enable tomcat-autostart.service 

我得到的错误信息:

Failed to execute operation: Bad message 

而且我也得在/ 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 '='. 

我让它工作了一段时间,然后我在“[Unit]”行上添加了一些注释,并且它停止工作。然后我删除了这些注释,并可能无意中修改了脚本中的其他内容,之后我再也无法使用它了。

它似乎取悦它在它自己的矛盾。第一个错误消息说第一行有一个赋值('[Unit]'),第三个说明赋值缺少'='符号。所以基本上,'[Unit]'是一项任务,除非它不是因为缺少'='符号。

搜索这个问题已确定所述第二错误消息是他人的直接原因。由于它忽略了节标题,因此它从不读取ExecStart和ExecStop声明。如果我能解决第一和第三的错误信息,我应该能够

什么是我的脚本的实际问题?运行'sudo/usr/bin/tomcat-autostart start'按预期运行成功,并且Internet错误消息中最常见的原因是脚本不使用绝对路径(在这种情况下,我会这样做)

回答

0

欢迎到StackOverflow。

systemd脚本看起来不错。此外,当我复制/粘贴到我自己的系统,并通过systemd-analyze verify运行它,它是不会产生这种error--我只得到有关文件路径的错误,不要我的系统上存在,但是对你应该存在:

systemd-analyze verify ~/tmp/t.service 
t.service: Failed to create t.service/start: Unit var-www-projects.mount not found. 
t.service: Command /usr/bin/tomcat-autostart is not executable: No such file or directory 
t.service: Command /usr/bin/tomcat-autostart is not executable: No such file or directory 

我认为在您将其匿名时,该错误在翻译时丢失了。运行systemd-analyze verify /usr/lib/systemd/system/tomcat-autostart.service并确认您从实际文件中获得的错误。

此外,修改文件应/etc/systemd/system/usr/lib中的文件只能由您安装的软件包管理。

如果/etc/systemd/system中的文件名称为/usr/lib/systemd/system目录中的并行文件,它将覆盖它。

+0

我仔细检查了匿名没有改变任何东西。被更改的行是Description,Requires,After,ExecStart和ExecStop行,以及* .service文件的文件名。文件中没有任何单引号。 将文件移动到'/ etc/systemd/system'没有改变任何东西,除了'/ var/log/messages'中的输出(现在引用了'/etc/systemd/system/tomcat-autostart.service ',而不是'/ usr/lib/systemd/system/tomcat-autostart.service')但是,我将在未来使用该目录。 –

+0

查看提及'systemd-analysis verify'工具的更新答案。 –

0

我已经解决了这个问题。事实证明,当我添加注释(将文件从utf-8编码转换为utf-16编码)时,文件的编码发生了变化。我认为systemd不支持utf-16,并将其解释为ASCII(或别的东西)。将编码更改回UTF-8允许自动启动脚本再次开始工作。