[英]Continuous Python script and restart if ended
我正在編寫一個腳本,該腳本通過Arduino上的i2c從433 MHz接收器讀取輸出到Raspberry Pi。 我試圖從rc.local運行啟動它,但似乎幾天后腳本結束/停止/中斷/停止/被殺死(?)。
我試圖從cron運行以下腳本,以確定是否運行,並在停止后啟動Python腳本。 但是它似乎無法檢測到正在運行的腳本,並且每次運行時都啟動一個新腳本,因此最終導致系統崩潰。
#!/bin/bash
until <path to Python script>; do
sleep 1
done
exit(0)
我還嘗試用允許腳本運行一分鍾並每分鍾用cron重新啟動腳本的語句替換始終為true的while語句,但這也導致腳本沒有結束並且開始了新的過程。
是否有人對我如何使腳本穩定或能夠重新啟動沒有任何想法。 即始終一直運行到無限! :-)
Python腳本:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Run in correct folder
import os
os.system("<path to script-folder>")
import sys
import MySQLdb as mdb
from smbus import SMBus
import RPi.GPIO as GPIO
import datetime
import time
addr = 0x10
intPin = 4
bus = SMBus(1)
def readData():
val = bus.read_byte(addr)
raw = val << 24
val = bus.read_byte(addr)
raw = raw | (val << 16)
val = bus.read_byte(addr)
raw = raw | (val << 8)
val = bus.read_byte(addr)
raw = raw | val
# Tidstämpel
ts = time.time()
date = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
try:
con = mdb.connect('<server>', '<User>', '<password>', '<DB>')
con.autocommit(True)
cur = con.cursor()
cur.execute("INSERT INTO <DB statement>") # Data is stored as integers
except mdb.Error, e:
errorLog = open('<path to log>', 'a')
errorlog.write("Error %d: %s" % (e.args[0],e.args[1]) + "\n")
errorlog.close()
sys.exit(1)
finally:
if con:
cur.close()
con.close()
while True:
GPIO.setmode(GPIO.BCM)
GPIO.setup(intPin,GPIO.IN)
GPIO.wait_for_edge(intPin, GPIO.RISING)
readData()
使用linux屏幕運行python腳本,它將一直在后端運行,直到您停止腳本為止。
http://www.tecmint.com/screen-command-examples-to-manage-linux-terminals/
考慮使用daemontools 。 它很小,可以確保您的代碼永遠運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.