我正在创建一个简单的系统服务,我已经创建了正确的启动。
这是tomcat.service,我已放入/lib/systemd/system
:
[Unit]
Description=A systemd daemon configured to run Apache Tomcat 8.
After=syslog.target network.target
[Service]
Type=forking
PIDFile=/home/technomage/Migration/Programming\ Files/Development\ Plugins\ and\ Software/apache-tomcat-8.0.26/bin/tomcat.pid
ExecStart=/home/technomage/Migration/Programming\ Files/Development\ Plugins\ and\ Software/apache-tomcat-8.0.26/bin/startup.sh
ExecStop=/home/technomage/Migration/Programming\ Files/Development\ Plugins\ and\ Software/apache-tomcat-8.0.26/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
将文件放入文件夹后,我运行了systemctl enable tomcat.service
。
在此之后,运行sudo systemctl start tomcat.service
会出现以下错误:
Job for tomcat.service failed. See 'systemctl status tomcat.service' and 'journalctl -xn' for details.
通过sudo journalctl
仔细检查相关错误会发现以下相关错误:
Oct 24 19:22:05 theforge systemd[6674]: Failed at step EXEC spawning /home/technomage/Migration/Programming\ Files/Development\ Plugins\ and\ Software/apache-tomcat-8.0.26/bin/startup.sh: No such file or directory
Oct 24 19:22:05 theforge systemd[1]: tomcat.service: control process exited, code=exited status=203
但是,我知道给ExecStart
的位置存在的事实,因为我可以将这个非常小的内容粘贴到我的shell中,它将完美地启动Tomcat!
所以我有点不知所措。我试图从路径中删除\
,认为它可能会利用一些奇怪的Windows影响风格。仍然没有任何作用。
我搞砸了哪里?
答案 0 :(得分:1)
事实证明,在unit
文件中使用带空格的路径的唯一方法是删除转义字符并双引号整个路径。
[Service]
Type=forking
PIDFile="/home/technomage/Migration/Programming Files/Development Plugins and Software/apache-tomcat-8.0.26/bin/tomcat.pid"
ExecStart="/home/technomage/Migration/Programming Files/Development Plugins and Software/apache-tomcat-8.0.26/bin/startup.sh"
ExecStop="/home/technomage/Migration/Programming Files/Development Plugins and Software/apache-tomcat-8.0.26/bin/shutdown.sh"
这似乎是一个明显的解决方案,除了这里的问题是这个"功能"仅在systemd
的更新版本中受支持。
Debian Jessie(我正在使用的发行版)附带的systemd
证明没有这个功能。因此唯一的方法是升级到最新版本。
Debian Jessie开箱即用了一个非常古老的版本,215-17
。
我通过暂时将我的存储库更改为sid
,更新我的来源以及升级systemd
来解决此问题。
有了这个,systemd
现在不再有路径问题或找到所述的二进制文件。