[英]Pythonanywhere - ping: socket: Operation not permitted
请帮忙。 我有一个电报机器人,当我从 Bash 控制台启动他时,每 60 秒 ping static IP - 它工作正常,但每天停止工作一次。 我尝试使用 Always on task 但在日志文件中收到“ping: socket: Operation not permitted”。 我有 5 美元的帐户,我该怎么办?
从 Bash 控制台运行时我看到了什么:
--- 176.102.48.100 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms PING 176.102.48.100 (176.102.48.100) 56(84) bytes of data.
--- 176.102.48.100 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms PING 176.102.48.100 (176.102.48.100) 56(84) bytes of data. --- 176.102.48.100 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms
我在 Always On 任务日志中看到的内容:
2023-01-12 08:55:34 - Task preparing to start
Jan 12 09:00:58 ping: socket: Operation not permitted
Jan 12 09:01:58 ping: socket: Operation not permitted
Jan 12 09:02:58 ping: socket: Operation not permitted
Jan 12 09:03:58 ping: socket: Operation not permitted
Jan 12 09:04:58 ping: socket: Operation not permitted
我的 Ping 脚本
def check_ip_available() -> bool:
hostname = "IP HERE"
response = os.system("ping -c 1 " + hostname)
if response == 0:
return True
return False
我可以解决这个问题吗? 谢谢
我尝试了两种方式来启动我的机器人,但它只能从 Bash 控制台运行。 但是控制台每 24 小时重置一次,我需要 Always On Task
您遇到的问题似乎与通过 Always On Task 运行脚本时的用户权限有关。 错误消息“ping: socket: Operation not permitted”表示脚本没有打开套接字和发送 ping 请求所需的权限。
解决此问题的一种方法是使用 sudo 命令以超级用户 (root) 身份运行脚本。 但是,不建议这样做,因为它可能存在安全风险。
另一种选择是更改脚本以使用不需要原始套接字访问的替代库。 您可以使用的库之一是 ping3,它是 ping 命令的纯 Python3 实现。
您可以通过运行以下命令来安装它:
pip install ping3
然后,您可以在脚本中使用ping3
库中的ping()
function,如下所示:
from ping3 import ping
hostname = "IP HERE"
response = ping(hostname)
if response is not None:
return True
else:
return False
还值得检查在 Always On Task 中运行脚本的用户。 确保用户具有运行脚本所需的权限。
请注意,此解决方案适用于 Linux/Unix 系统,对于 Windows,您可能需要使用不同的库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.