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?

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.
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.
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...