[英]xinetd service calls python script (doesn't execute properly)
I read this: 我读到这个:
You can use xinetd to add a service starting your python script. 您可以使用xinetd添加服务以启动python脚本。 The standard input and output will be transmitted over the network on desired port, so you do not need to modify your scripts (input/raw_input and print methods will work fine). 标准输入和输出将通过网络在所需的端口上传输,因此您无需修改脚本(input / raw_input和print方法可以正常工作)。
As a result, I'm using a custom xinet service to launch script.py when a TCP connection is established to 192.168.240.37:65123. 结果,当建立到192.168.240.37:65123的TCP连接时,我正在使用自定义的xinet服务来启动script.py。 The behavior is not as desired/expected. 该行为不是期望/预期的。
/root/script.py /root/script.py
#! /usr/bin/python
my_name = raw_input("Enter your name: ")
print my_name
quit()
/etc/xinetd.d/netunique-server /etc/xinetd.d/netunique-server
service netunique
{
disable = no
id = netunique-server
type = unlisted
wait = no
socket_type = stream
protocol = tcp
user = root
server = /usr/bin/python
server_args = /root/script.py
port = 65123
flags = IPv4 REUSE
bind = 192.168.240.37
}
systemctl status xinetd systemctl状态xinetd
Nov 11 21:24:00 netunique.ourhome.com xinetd[2161]: xinetd Version 2.3.15 started with libwrap loadavg labeled-ne... in.
Nov 11 21:24:00 netunique.ourhome.com xinetd[2161]: Started working: 1 available service
telnet 192.168.240.37 65123 (expected behavior) telnet 192.168.240.37 65123(预期的行为)
[root@netunique xinetd.d]# telnet 192.168.240.37 65123
Trying 192.168.240.37...
Connected to 192.168.240.37.
Escape character is '^]'.
Enter your name: John Smith <-- I type name after prompt here
John Smith <-- Script prints entry back to screen
Connection closed by foreign host. <-- Script does its quit()
telnet 192.168.240.37 65123 (actual behavior) telnet 192.168.240.37 65123(实际行为)
[root@netunique xinetd.d]# telnet 192.168.240.37 65123
Trying 192.168.240.37...
Connected to 192.168.240.37.
Escape character is '^]'.
<blank> <-- no prompt as expected
John Smith <-- I enter some data and hit Enter
Enter your name: John Smith <-- Hard to tell exactly what happened here
Connection closed by foreign host. <-- Hard to tell exactly what happened here
[root@netunique xinetd.d]#
When I say 'hard to tell exactly what happened here', I mean it's hard to tell if in the above output the 'John Smith' which shows up after the 'Enter your name: ' prompt is a result of the print statement and hard to tell if the 'Connection closed by foreign host' is a result of the quit() statement. 当我说“很难说出这里到底发生了什么”时,我的意思是很难说出上面输出中的“ John Smith”是否出现在“输入您的名字:”提示后,是打印语句的结果,判断“外部主机关闭的连接”是否是quit()语句的结果。
nc 192.168.240.37 65123 (actual behavior) nc 192.168.240.37 65123(实际行为)
[root@netunique xinetd.d]# nc 192.168.240.37 65123
<blank> <-- no prompt as expected
John Smith <-- I enter some data and hit Enter
Enter your name: John Smith <-- Hard to tell exactly what happened here
<-- Nothing happened here, I hit Enter
<-- I hit Enter again
Ncat: Broken pipe. <-- This is the end result
As you can see I get very similar behavior with netcat. 如您所见,netcat的行为非常相似。
The real problem for me is apparently my lack of socket programming knowledge. 对我来说,真正的问题显然是我缺乏套接字编程知识。 I found this post online searching for "xinetd python no data" ( https://mail.python.org/pipermail/python-list/2007-July/423659.html ) which helped me at least get my stuff working and sort of illustrated via example a bit about how socket programming actually works. 我发现此帖子在线搜索“ xinetd python no data”( https://mail.python.org/pipermail/python-list/2007-July/423659.html ),这至少对我有所帮助。通过示例说明了套接字编程的实际工作原理。 The solution is below, I removed the raw_input from the original script and replaced it with concepts from the post. 解决方案如下,我从原始脚本中删除了raw_input并用文章中的概念替换了它。
/root/script.py (original) /root/script.py(原始)
#! /usr/bin/python
my_name = raw_input("Enter your name: ")
print my_name
quit()
/root/script.py (modified & working) /root/script.py(已修改且可以正常使用)
#! /usr/bin/python
import sys
print "Enter your name:"
sys.stdout.flush()
my_name = sys.stdin.readline().strip()
print "Your name is %s" % my_name
sys.stdout.flush()
quit()
telnet 192.168.240.37 65123 (actual behavior - working) telnet 192.168.240.37 65123(实际行为-运行)
[root@netunique ~]# telnet 192.168.240.37 65123
Trying 192.168.240.37...
Connected to 192.168.240.37.
Escape character is '^]'.
Enter your name:
Bob Smith
Your name is Bob Smith
Connection closed by foreign host.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.