在启动时运行命令不起作用(由于运行代码时网络未启动)

ble*_*mbo 5 startup python command-line networking

我想在 ubuntu 启动时自动运行一个 python 脚本。通常我要做的是在 ubuntu 上打开命令行并输入

python /home/ubuntu/Desktop/UDP_Server.py
Run Code Online (Sandbox Code Playgroud)

这将运行 python 代码,所以我现在可以启动我的其他客户端代码来与之通信。

我想找到一种在启动时自动运行此代码的方法。我尝试在我的/etc/init.d文件中放置一个脚本,我也尝试将其作为启动程序,如下所示。

启动申请

但是当我打开我的计算机时,此代码不会运行..因为它没有像我期望的那样与我的客户端代码进行通信(就像我从命令行运行 python 脚本时那样)

编辑:

在 rc.local 中放置诸如 touch 命令之类的命令似乎在启动时起作用。crontab 也是如此。我添加了一个命令@reboot,它可以工作。但是这个特定的代码在启动时似乎不起作用(无论是我把它放在 crontab、rc.local、init.d 中,还是作为启动应用程序)

下面是我的 UDP 服务器代码

import socket
import serial
import subprocess

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

server_address = (192.168.1.13, 10000)
print 'starting up on %s port %s' % server_address
sock.bind(server_address)

ser = serial.Serial('/dev/ttymxc3', 115200, timeout = 0)
print 'Serial connected'

while True:
    data = sock.recv(7)
    print 'received ', data
    if data == "STOP":
        subprocess.call(["sudo", "shutdown", "-h", "now"])
    else:
        ser.write(data)
Run Code Online (Sandbox Code Playgroud)

当我在命令行运行它时,它的工作原理是这样的

starting up on 192.168.1.13 port 10000
Serial connected
Run Code Online (Sandbox Code Playgroud)

然后程序等待连接。如果我有我的 UDP 客户端发送 STOP

received 'STOP'
Run Code Online (Sandbox Code Playgroud)

然后计算机关闭。

但是当代码在启动时运行并且我通过 UDP 客户端发送“停止”时,计算机不会关闭。带有 sock.recv 的服务器代码中的 while 循环不知何故没有接收到发送给它的字符串。

解决方案:

在我将以下代码行添加到我的 /etc/network/interfaces 文件之后

auto wlan0
    iface wlan0 inet dhcp
    post-up python /home/ubuntu/Desktop/UDP_Server.py
Run Code Online (Sandbox Code Playgroud)

在 wifi 网络工作后启动时执行的代码,因此我的客户端能够与服务器进行通信。

Yur*_*kov 1

您需要在网络接口启动后运行命令。如本答案所述: https: //unix.stackexchange.com/a/91264