Arquivo de abril \05\+00:00 2011

Problema com servidor de câmeras – 2

Na postagem anterior eu demonstrei como solucionei o problema no servidor de câmeras, mas eu também citei uma solução que tinha realizado antes, então resolvi postar essa solução, mesmo porque estou usando os dois sistemas que eu desenvolvi, com o sistema anterior eu evito que a memória dos servidores sobrecarregue os reinicializando a cada três horas, com o ou sistema ele me da a possibilidade de reiniciar a maquina remotamente caso necessário, claro que o sistema pode (e vai) ser melhorado para um uso mais profissional, como eu citei ele não passa de uma solução para eu problema.

A ideia básica do sistema é que nos computadores que são responsáveis pelas câmeras fique um código Python rodando all time possibilitando que ele seja usado a qualquer momento, nessa caso ele só tem uma função, mas pretendo colocar mais funções nele. O código abaixo assim como o da postagem anterior precisa que o arquivo SHUTDOWN.EXE esteja na raiz da unidade C:, mas você pode modificar código de acordo com as suas necessidades.

cliente.py:

from socket import socket,AF_INET,SOCK_STREAM
HOST = '127.0.0.1'
PORT = 5000

if __name__ == '__main__':
tcp=socket(AF_INET,SOCK_STREAM)
dest=(HOST,PORT)
tcp.connect(dest)
tcp.send(b'reboot')
msg=tcp.recv(1024)
print(str(msg,'utf-8'))
tcp.close()

servidor.py:

from os import system
from socket import socket,AF_INET,SOCK_STREAM
HOST = ''
PORT = 5000

def winReboot():
system('C:/SHUTDOWN.EXE -r -f -t 10')

if __name__ == '__main__':
tcp=socket(AF_INET,SOCK_STREAM)
orig=(HOST,PORT)
tcp.bind(orig)
tcp.listen(1)

while True:
con,cliente=tcp.accept()
print('Conectado por ',cliente)
while True:
msg=con.recv(1024)
if not msg: break
if msg == b'reboot':
con.send(b'Reiniciando o Computador com sucesso!')
winReboot()
print('Finalizando a conexao do cliente ',cliente)
con.close()

Deixe um comentário

Problema com servidor de câmeras

Essas últimas semanas estou tendo um problema com os servidores de câmeras da empresa, tando na central quando nas filiais, no caso o sistema usa uma placa da captura que tem um programa que envia para internet as imagens das câmeras, o problema é que o programa é falho ele acumula a memória da maquina e quando enche o programa trava e fecha, ele da um erro no Microsoft Visual C++ Runtime Library, e não reinicia sozinho, quando isso acontece aqui na central (beleza) resolvo em minutos, basta reiniciar o computador, mas quando acontece nas filiais, eu tenho que ir até a filial só para reiniciar a maquina sendo que a mais perto fica duas horas de distância.

Minha primeira solução para o problema foi desenvolver um programa que usa socket’s para quando a maquina travar eu possa reiniciá-la remotamente já que eu não podia instalar um programa de acesso remoto por questões de segurança. Funcionou no primeiro dia quando eu testei, mais no outro dia quando o erro aconteceu de novo percebi um outro problema, quando o sistema das câmeras trava, ele também travava todo que qualquer programa que ousasse usar socket’s já que o programa também usava, quando foi na filial vi que também havia outra mensagem de erro Gerenec Host… em resumo travou tudo, resolvi pensar em outra solução.

Para solucionar o problema de vez, eu resolvi criar um temporizador que a cada três horas reinicializava a maquina automaticamente, já que o sistema funciona em uma média de quatro a seis horas, dependia da quantidade de memória da maquina.

Desenvolvi um sistema usando Python que se inicializa junto com o MS Windows, eu não criei um código para alterar o registro do MS Window porque não vi necessidade, só coloquei um atalho na pasta Inicializar do menu Iniciar.

O sistema de Temporizador funciona com três arquivos, um ícone (time.ico), o código (tempo.pyw) e um programa de terceiro (SHUTDOWN.EXE) que é uma ferramente de rede para desligar ou reinicializar o computador remotamente (ou internamente).

Faça download do código aqui.

Ícone:

Código:

from tkinter import *
from tkinter.messagebox import *
from time import sleep
from threading import Thread
from os import system
def tempo(lbl):
h=3
m=0
s=0
while not lbl.stop:
sleep(1)
if s == 0:
s = 59
if m == 0:
m = 59
if h == 0:
m=0
s=0
lbl.stop=True
lbl.master.destroy()
system('C:/SHUTDOWN.EXE -r -f -t 10')
else:
h -= 1
else:
m -= 1
else:
s -= 1
lbl.text.set(str(h)+':'+str(m)+' '+str(s))

class frmTime():
def __init__(self,master):
self.master=master
self.master.title('Tempo restante:')
self.master.geometry('400x100-50-50')
self.master.wm_iconbitmap('time.ico')
self.master.protocol('WM_DELETE_WINDOW',self.onDestroy)

self.stop=False

self.text=StringVar()
self.text.set('3:00 00')
self.lblTime=Label(self.master,textvariable=self.text,font=("Comic Sans MS", 72))
self.lblTime.pack()
def onDestroy(self):
if askyesno(title='Aviso!',message='Deseja realmente sair?'):
self.stop=True
self.master.destroy()

if __name__ == '__main__':
root=Tk()
f=frmTime(root)
p=Thread(target=tempo,args=(f,))
p.start()
root.mainloop()

Deixe um comentário