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

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

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

python /home/ubuntu/Desktop/UDP_Server.py

这将运行 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)

当我在命令行运行它时,它的工作原理如下

starting up on 192.168.1.13 port 10000
Serial connected

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

received 'STOP'

然后计算机就关闭了。

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

解决方案:

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

auto wlan0
    iface wlan0 inet dhcp
    post-up python /home/ubuntu/Desktop/UDP_Server.py

启动时执行的代码在 Wi-Fi 网络恢复工作后所以我的客户端能够与服务器通信。

答案1

我经常发现在启动时运行某些东西的最简单方法是通过带有@reboot 的 cron。

它可存在于您的用户 crontab 中,这通常比通过以 root 权限启动的 init 运行它更好。

手册页有关详细信息,请参阅 crontab(5)。

它并不适合每种用途,但它通常是一种很好的机制,并且非常容易实现。

答案2

我认为您需要在rc.local以 root 身份运行的所有脚本中添加您的脚本。

编辑rc.local

sudo nano /etc/rc.local


#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
python /home/ubuntu/Desktop/UDP_Server.py

exit 0

Ctrl要使用 nano 按+保存并退出X

答案3

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

相关内容