首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在命令行中完美地运行,不会通过systemd ExecStart运行。

在命令行中完美地运行,不会通过systemd ExecStart运行。
EN

Unix & Linux用户
提问于 2015-01-08 05:16:47
回答 2查看 3.1K关注 0票数 1

我已经在我的拱形机器上安装了用python编写的蝶形http终端服务器。我对systemd并不熟悉,但我对其中一个命令行参数有问题。

代码语言:javascript
复制
/usr/bin/butterfly.server.py --shell=/usr/fish --unsecure --host="0.0.0.0"

这就像预期的那样,我可以通过另一台机器上的web浏览器访问终端。

但是,当我为它创建一个简单的系统.service时:

代码语言:javascript
复制
[Unit]
Description=Butterfly Terminal Server

[Service]
ExecStart=/usr/bin/butterfly.server.py --shell=/bin/fish --host="0.0.0.0" --unsecure

[Install]
WantedBy=multi-user.target

它不会在--host="0.0.0.0"行中以ExecStart开头,并报告:

代码语言:javascript
复制
[root@ArchHP sockets.target.wants]# systemctl status butterfly.service -l
● butterfly.service - Butterfly Terminal Server
   Loaded: loaded (/usr/lib/systemd/system/butterfly.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Wed 2015-01-07 23:08:29 CST; 26s ago
  Process: 3203 ExecStart=/usr/bin/butterfly.server.py --shell=/bin/fish --host="0.0.0.0" --unsecure (code=exited, status=1/FAILURE)
 Main PID: 3203 (code=exited, status=1/FAILURE)

Jan 07 23:08:28 ArchHP butterfly.server.py[3203]: File "/usr/lib/python3.4/site-packages/tornado/tcpserver.py", line 125, in listen
Jan 07 23:08:28 ArchHP butterfly.server.py[3203]: sockets = bind_sockets(port, address=address)
Jan 07 23:08:28 ArchHP butterfly.server.py[3203]: File "/usr/lib/python3.4/site-packages/tornado/netutil.py", line 106, in bind_sockets
Jan 07 23:08:28 ArchHP butterfly.server.py[3203]: 0, flags)):
Jan 07 23:08:28 ArchHP butterfly.server.py[3203]: File "/usr/lib/python3.4/socket.py", line 530, in getaddrinfo
Jan 07 23:08:28 ArchHP butterfly.server.py[3203]: for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
Jan 07 23:08:28 ArchHP butterfly.server.py[3203]: socket.gaierror: [Errno -2] Name or service not known
Jan 07 23:08:29 ArchHP systemd[1]: butterfly.service: main process exited, code=exited, status=1/FAILURE
Jan 07 23:08:29 ArchHP systemd[1]: Unit butterfly.service entered failed state.
Jan 07 23:08:29 ArchHP systemd[1]: butterfly.service failed.

如果然后删除--host="0.0.0.0",它将成功启动,但只能在本地计算机上访问-其他计算机将不被授予访问权限。然后,我试图为该服务制作一个butterfly.socket,但在查找错误消息方面没有任何成功。

为什么通过ExecStart运行它与在命令行中运行它有任何不同,以及如何使用该参数启动它?最后,我可以尝试修改python脚本,而不是默认为0.0.0.0,但是我想了解为什么我要使用sudo systemctl restart butterfly.service而不是直接执行时得到错误。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2015-01-08 08:40:36

当您从shell开始蝴蝶时,它会删除0.0.0.0周围的引号。另一方面,systemd在这种情况下不会引用扩展,因为它不是shell。

实际上,systemd能够去掉参数周围的引号,但不能在其中。

因此,尝试删除服务文件中0.0.0.0的引号,并查看哪些更改。别忘了systemctl daemon-reload

P.S.:你不能通过编写一个.socket单元就神奇地使守护进程套接字激活。必须更改其代码以支持套接字激活。

票数 3
EN

Unix & Linux用户

发布于 2015-01-08 05:52:41

我猜您有一些依赖关系可以运行您的butterfly.service.While,从命令行运行可能是所有服务都启动了,您没有遇到任何问题,但是从systemd开始时,可能有一些依赖关系服务没有启动,在这些服务your butterfly.service到来之前,尝试将Restart=always添加到[service]部分,因此如果它崩溃,它应该再次重新启动自己。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/178085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档