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
起動時に実行されたコードは、wifiネットワークが機能した後で、クライアントはサーバーと通信できました。
ネットワークインターフェイスが起動した後、コマンドを実行する必要があります。この回答で説明されているように: https://unix.stackexchange.com/a/91264
起動時に何かを実行する最も簡単な方法は、cronで@rebootを使用することです。
これは、ユーザーのcrontabで実行できます。多くの場合、root権限で開始するinitで実行するよりも便利です。
詳細については、crontab(5)の manpage を参照してください。
それはすべての使用に理想的ではありませんが、多くの場合、優れたメカニズムであり、非常に簡単です。
スクリプトをrc.local
に追加する必要があると思います。すべてのスクリプトはルートとして実行されます。
編集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+X。