簡體   English   中英

連續的Python腳本,如果結束則重新啟動

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM