Página 1 de 2

Linux Daemon

Publicado: 07 Sep 2011, 15:34
por Anisset
Hola,

Basandome en el codigo de esta pagina [1] he hecho un daemon para los servidores de tvalacarta y pelisalacarta de linux para WiiMC. Hay que descargar el fichero daemon.py y en vez del la impelementación que nos da, copiamos esta:

daemon-tvalacarta.py

Código: Seleccionar todo

#!/usr/bin/env python

import sys, time, os
from core import config
config.force_platform("wiimc")
from  core import logger
logger.info("[wiimcrun.py] tvalacarta init...")

from daemon import Daemon

class MyDaemon(Daemon):
	def run(self):
		# Ejecuta el programa principal
		from platform.wiimc import launcher
		launcher.run()

if __name__ == "__main__":
	prefix=os.getcwd()
	daemon = MyDaemon('/tmp/daemon-tvalacarta.pid', stdout=prefix+'/daemon-log.txt', stderr=prefix+'/daemon-log.txt')
	if len(sys.argv) == 2:
		if 'start' == sys.argv[1]:
			daemon.start()
		elif 'stop' == sys.argv[1]:
			daemon.stop()
		elif 'restart' == sys.argv[1]:
			daemon.restart()
		else:
			print "Unknown command"
			sys.exit(2)
		sys.exit(0)
	else:
		print "usage: %s start|stop|restart" % sys.argv[0]
		sys.exit(2)
daemon-pelisalacarta.py

Código: Seleccionar todo

#!/usr/bin/env python

import sys, time, os
from core import config
config.force_platform("wiimc")

from  core import logger
logger.info("[wiimcrun.py] pelisalacarta init...")

from daemon import Daemon

class MyDaemon(Daemon):
	def run(self):
		# Ejecuta el programa principal
		from platform.wiimc import launcher
		launcher.run()

if __name__ == "__main__":
	prefix=os.getcwd()
	daemon = MyDaemon('/tmp/daemon-pelisalacarta.pid', stdout=prefix+'/daemon-log.txt', stderr=prefix+'/daemon-log.txt')
	if len(sys.argv) == 2:
		if 'start' == sys.argv[1]:
			daemon.start()
		elif 'stop' == sys.argv[1]:
			daemon.stop()
		elif 'restart' == sys.argv[1]:
			daemon.restart()
		else:
			print "Unknown command"
			sys.exit(2)
		sys.exit(0)
	else:
		print "usage: %s start|stop|restart" % sys.argv[0]
		sys.exit(2)
Pos supuesto hay que copiar el fichero daemon.py y el launcher del daemon en cada carpeta correspondiente.
Para lanzarlo, $ python daemon-pelisalacarta.py start
Para pararlo, $ python daemon-pelisalacarta.py stop
Para reiniciarlo, $ python daemon-pelisalacarta.py restart

[1]http://www.jejik.com/articles/2007/02/a ... in_python/

P.D: ¿Alguien puede borrar los mensajes de hron y banearlo? :evil:

Re: Linux Daemon

Publicado: 07 Sep 2011, 23:21
por jesus
Joder, gracias :)

No tenía ni idea de que esto se podía hacer. En mi idea más remota estaba el hacer un script de arranque para poner en el /etc/init.d, pero ni siquiera sabía por donde empezar. Sí que tengo la chuleta apuntada para hacerlo como servicio de Windows, pero de esto no había mirado nada todavía.

Ten por seguro que lo voy a incluir en la próxima versión, mi servidor es Ubuntu y es una buena solución.

A ver si puedo por fin subir una versión estable al SVN, con todos los elementos en su sitio. No me olvido de tu oferta de ayuda :)

P.D.: Estoy aquí que me caigo de sueño, pero no podía dejar de venir... y eliminar al robot de spam y todos sus mensajes. Gracias por la paciencia.

Re: Linux Daemon

Publicado: 08 Sep 2011, 10:28
por Anisset
Si, he estado mirando como cargarlo al arrancar y veo que lo que se utiliza es lo del script en /etc/init.d, Ya he mirado alguno y no parece dificil.

Tambien estaba pensando en un script en bash para instalar el daemon (copiar el script en /etc/init.d). No acabo de decidirme de si es mejor dejar los archivos python del programa en si, en la carpeta /home o alguna otra del sistema de carpetas. Mi duda es si los permisos, la seguridad, la disponibilidad para otros usuarios, etc. se puede ver afectada al instalar en /home.

Voy a hacer un par de pruebas y copio los scripts aqui. ;)

Re: Linux Daemon

Publicado: 08 Sep 2011, 15:40
por jesus
Hacer el script de arranque no debería ser difícil, partiendo de otro ya hecho, y lo mejor para la instalación es hacer un paquete .deb o algo por el estilo.

Con apt-get creo que todo eso está resuelto, y no se si con los .deb también.

Re: Linux Daemon

Publicado: 08 Sep 2011, 16:12
por Anisset
Ya tengo el script.
El script crea otro script de arranque en /etc/init.d, lo configura segun la web [1] y arranca el daemon.
Tambien he programado la opción de desinstalar.
Deberia funcionar en Debian y derivados. Yo lo he probado en Ubuntu 11.04.
Lo del .deb lo deberia mirar, pero mi experiencia es nula. A lo mejor lo pregunto a Google. :P

Código: Seleccionar todo

#!/bin/bash
############################################################################################################
#	ShellScript: 	install-daemon.sh
#	Autor: 		Anisset
#	Fecha: 		08/09/11
#	Descripción:	Script de instalación y desinstalación del daemon para linux, comprobado en Ubuntu 11.04
############################################################################################################
####################################################Configuración#############################################
#Nombre del script
script=tvalacarta.sh	#tvalacarta.sh o pelisalacarta.sh
programa=tvalacarta	#tvalacarta o pelisalacarta

####################################################Funciones################################################

function instalar {

	#Se Guarda el directorio del programa
	path=`pwd`
	echo "Directorio detectado : "$path

	#Se crea el script
	echo "Creando script ..."

	echo '#!/bin/bash' > $script
	echo '#Descripción: Script de inicialización del daemon de '$programa'.' >> $script
	echo '#Autor: Anisset' >> $script
	echo '' >> $script
	echo 'path='$path >> $script
	echo '' >> $script
	echo 'cd $path' >> $script
	echo 'python daemon-'$programa'.py $1' >> $script
	echo "Script creado"

	echo $script
	sudo mv $script /etc/init.d/$script
	echo $script

	#Se configura el script
	echo "Configurando script:"
	sudo  update-rc.d $script defaults

	#Se dan permisos de ejecucion
	sudo  chmod +x /etc/init.d/$script

	#Inicialización del daemon
	/etc/init.d/$script start
	echo ""	
	echo "Daemon inicializado."
	echo ""	

	#ultimas indicaciones
	echo "Script instalado."
	echo "Para inicializar el daemon ejecutar /etc/init.d/"$script" start"
	echo "Para para-lo ejecutar /etc/init.d/"$script" stop"
	echo "Para reiniciarlo ejecutar /etc/init.d/"$script" restart"
}

function remove {

	#Para el daemon si está en ejecución
	echo "Iniciando desinstalación."	
	echo "Parando Daemon."
	echo ''	
	/etc/init.d/$script stop
	echo ''
	echo "Daemon parado."
	echo ''

	#Se desconfigura el inicio del sistema
	echo "Eliminando scripts:"
	sudo update-rc.d -f $script remove

	#Se borra el script	
	sudo rm /etc/init.d/$script
	echo "Script eliminado"
}

function informa {
	#informa del funcionamiento
	echo "Funcionamiento:	bash $0 opción"
	echo "Opciones:"
	echo "	-i , --install	Instala el daemon para que se inicie automaticamente."
	echo "	-r , --remove	Desinstala el daemon."
	echo ''
}

function opcion {
	case $1 in 
	-i | --install)
		instalar
	;;
	-r | --remove)
		remove
	;;
	-h | --help)
		informa
	;;
	*)
		echo "$0: Opción no valida: $1"
		informa
		exit
	;;
	esac
}

###############################################Programa Principal############################################

case $# in 
	0)
		echo "$0: Ningun parametro detectado."
		informa
		exit
	;;
	1)
		opcion $1
	;;
	*)
		echo "$0: Demasiados parametros."
		informa
		exit
	;;
esac

exit


[1]http://embraceubuntu.com/2005/09/07/add ... at-bootup/

Re: Linux Daemon

Publicado: 08 Sep 2011, 18:03
por jesus
Gracias :)

Re: Linux Daemon

Publicado: 31 Oct 2011, 01:57
por smoothie
Hola

He descargado el archivo daemon.py y he creado el archivo daemon-pelisalacarta.py

He metido los dos archivos en la carpeta pelisalacarta y cuando creo pelisalacarta como daemon no se arranca y me devuelve los siguientes errores en el archivo daemon-log.txt

Código: Seleccionar todo

Traceback (most recent call last):
  File "daemon-pelisalacarta.py", line 23, in <module>
    daemon.start()
  File "/Applications/Wii-World/pelisalacarta-wii/daemon.py", line 85, in start
    self.run()
  File "daemon-pelisalacarta.py", line 15, in run
    from platform.wiimc import launcher
  File "/Applications/Wii-World/pelisalacarta-wii/platform/wiimc/launcher.py", line 19, in <module>
    logging.config.fileConfig("logging.conf")
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/config.py", line 70, in fileConfig
    formatters = _create_formatters(cp)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/config.py", line 106, in _create_formatters
    flist = cp.get("formatters", "keys")
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ConfigParser.py", line 599, in get
    raise NoSectionError(section)
ConfigParser.NoSectionError: No section: 'formatters'
Un saludo

Re: Linux Daemon

Publicado: 01 Nov 2011, 00:09
por jesus
Tienes que estar en el directorio del plugin para lanzarlo. El error es porque el fichero "logging.conf" no se puede encontrar, así que no puede inicializar los logs.

Cuando lo acabes de arreglar estaría bien que lo postearas, así lo incluimos en la distribución de las próximas versiones. Para esta ya no me dio tiempo...

Re: Linux Daemon

Publicado: 01 Nov 2011, 18:10
por smoothie
Hola Jesús

Tengo los archivos daemon.py y daemon-pelisalacarta.py en la misma carpeta que el archivo pelisalacarta.py.

Estoy situado en ese directorio y escribo la siguiente llamada para crear el daemon.

Código: Seleccionar todo

python daemon-pelisalacarta.py start
El resto ya lo sabes me da el error que comentaba en el mensaje anterior.

Un saludo y muchas gracias por adelantado.

Re: Linux Daemon

Publicado: 04 Nov 2011, 23:31
por jesus
Le echaré un vistazo.

Igual es porque cambié el sistema para detectar la plataforma, y eso le da problemas para averiguar cómo usar el logging...