• Sábado 20 de Abril de 2024, 10:03

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - ryuz

Páginas: [1]
1
Bueno hoy tenia la necesidad en el trabajo de realizar un código que proporcionara a una aplicación en Python los parametros de poder iniciar, parar y reiniciar el proceso.

La variable "cmd" contiene el el comando a ejecutar en modo "oculto", el código crea dos ficheros uno por nohup (el cual aun no se como evitar que se cree  :whistling:) y un fichero que creo para obtener el identificador del proceso que se crea para poder matarlo en cualquier momento mediante el parametro "stop".

Creo que es simple y puede ser util.

Código: [Seleccionar]
#!/bin/bash
i=`basename $0`
cmd="ping www.google.com"
function start() {
FILE="PID.binit"
case "${1}" in
"start")
if [ -f "${FILE}" ]; then
echo -e "\n[!] Process is running..."
else
echo -e "\n[+] Starting nohup ..."
nohup $cmd &
PID=$!
echo -e "\n[+] Starting Process..."
echo "kill -9 ${PID}" > "${FILE}"
fi
;;
"stop")
if [ -f "${FILE}" ]; then
echo -e "\n[!] Stopping Process..."
(`cat "${FILE}"`)
rm "${FILE}"
rm nohup.out
else
echo -e "\n[!] Process not running..."
fi
;;
"restart")
if [ -f "${FILE}" ]; then
echo -e "\n[+] Restarting Process..."
./${i} stop
./${i} start
else
echo -e "\n[!] Process not running..."
fi
;;
*)
usage
;;
esac
}
function usage() {
echo -e "\n${0} [start|stop|restart]\n"
}
if [ $# -eq 1 ]; then
start "${1}"
else
usage
fi

 :smartass:

Lo del comando "ping"  es simplemente de ejemplo, yo tenia una linea extensa debido al programa en Python y sus argumentos de ficheros de configuracion, logs, etcétera.

Hay veces que los programas no se inician como deben mediante update-rc.d, de ahí que me viera obligadoa  hacer este script.

 :kicking:

2
Python / [SCRIPT] Alerta en caso de sobrecarga del sistema *nix.
« en: Viernes 10 de Mayo de 2013, 11:41 »
Hola  :nosweat:

Aun no tengo un nombre real para este código ya que este fin de semana lo reharé pero con clases para que este mejor formado...

El programa se basa en la lectura de unos datos recibidos por dos comandos de sistema, y en el caso de que esos valores sean inferiores o superiores dependiendo de CPU o memoria, pues se alertara al usuario con un mensaje en el correo electrónico o un sms/creacion de evento en el calendario.

He utilizado la API que Google ofrece para implementar el calendario/funciones de este, en nuestros programas.

Código: [Seleccionar]
#!/usr/bin/python
#importamos librerias requeridas
import atom
import gdata.calendar
import gdata.calendar.service
import random
import time
import smtplib
import math
import commands
import logging
from email.mime.text import MIMEText
#variables globales
LOGFILE = "checkServer.log"
cpu_mail_level = 3
cpu_sms_level = 5
mem_mail_level = 2.5
mem_sms_level = 0.5
email = "******@gmail.com"
email_password = "*******"
#funciones
def check_cpu():
fObj = open("/proc/loadavg","r")
        fData = fObj.readline()
        fObj.close()
        cpu_status = math.ceil(float(fData.split()[0]))
return cpu_status
def check_mem():
status,mTotal = commands.getstatusoutput("free -m | grep Mem | cut -f11 -d' '")
status,mFree = commands.getstatusoutput("free -m | grep Mem | cut -f26 -d' '")
mFree = math.ceil((float(mFree)*100)/float(mTotal))
return mFree
def is_saturated():
logging.basicConfig(filename=LOGFILE,level=logging.DEBUG,format="%(asctime)s - %(name)s::%(levelname)s %(message)s")
cpu_level = check_cpu()
mem_level = check_mem()
print "Nivel de CPU: %s -- Nivel de Mem: %s" % (cpu_level,mem_level)
print "Nivel mail CPU: %s -- Nivel sms CPU: %s" % (cpu_mail_level,cpu_sms_level)
print "Nivel mail Mem: %s -- Nivel sms Mem: %s" % (mem_mail_level,mem_sms_level)
if( (cpu_level >= cpu_mail_level) and (cpu_level < cpu_sms_level) ): sendmail(cpu_level,"CPU")
elif(cpu_level >= cpu_sms_level):
sendsms(cpu_level,"CPU")
sendmail(cpu_level,"CPU")
else:
print "CPU funcionando correctamente."
logging.debug("CPU: OK")
if( (mem_level <= mem_mail_level) and (mem_level > mem_sms_level) ): sendmail(mem_level,"Memoria")
elif(mem_level <= mem_sms_level):
sendsms(mem_level,"Memoria")
sendmail(mem_level,"Memoria")
else:
print "Memoria funcionando correctamente."
logging.debug("Memory: OK")
def sendmail(nstatus,by):
sFrom = email
sTo = email
headers = ["From: "+sFrom,"Subject: Alerta PROLIANTG6 saturado.","To: "+sTo,"MIME-Version: 1.0","Content-Type: text/html"]
headers = "\r\n".join(headers)
msg = "El servidor PROLIANTG6 se encuentra al nivel %s de saturacion de %s." % (nstatus,by)
sObj = smtplib.SMTP("smtp.gmail.com",587)
sObj.ehlo()
sObj.starttls()
sObj.ehlo()
sObj.login(sFrom,email_password)
try: sObj.sendmail(sFrom,sTo,headers+"\r\n\r\n"+msg)
except: print "No se pudo enviar el correo."
else:
print "Se envio el correo correctamente."
logging.debug(by+" Email sent.")
sObj.close()
def sendsms(nstatus,by):
cs = gdata.calendar.service.CalendarService()
cs.email = email
cs.password = email_password
cs.source = "GoogleSMSCalender_" + str(random.randint(0, 10000))
cs.ProgrammaticLogin()
event = gdata.calendar.CalendarEventEntry()
event.title = atom.Title(text="Alerta PROLIANTG6 saturado.")
texto = "El servidor PROLIANTG6 se encuentra al nivel %s de saturacion de %s." % (nstatus,by)
event.content = atom.Content(text=texto)
event.where.append(gdata.calendar.Where(value_string="Repuestos Gualsan"))
start_time = time.strftime("%Y-%m-%dT%H:%M:%S.000Z", time.gmtime(time.time() + 2 * 60))
when = gdata.calendar.When(start_time=start_time, end_time=start_time)
reminder = gdata.calendar.Reminder(minutes=1, extension_attributes={"method":"sms"})
when.reminder.append(reminder)
event.when.append(when)
try: new_event = cs.InsertEvent(event, "/calendar/feeds/default/private/full")
except: print "No se pudo enviar el sms."
else:
print "SMS enviado correctamente."
logging.debug(by+" SMS sent.")
if __name__ == "__main__":
is_saturated()

Para quien no lo sepa, Google activo hace tiempo una función de SMS por alerta de eventos, por lo que en la configuración de Google Calendar deben tener el número asociado.

Tambien puede servir tener alguna aplicacion de Google Calendar en el telefono por lo que recibirian la alerta de un modo u otro.

Para la proxima versión tengo pensado:
  • POO
  • Procesamiento de procesos huerfanos
  • ¿?
Hay algunas lineas de más que imprimen texto por ejemplo que era más que nada de referencia.

Páginas: [1]