unity programas actualizar c# linux mono service

c# - programas - monodevelop unity 2018



¿Desarrollo de servicios similares a Windows en LINUX usando MONO? (4)

  1. Mono se envía con un sistema compatible con el Servicio de Windows llamado mono-service.

    • La palabra de servicio de Unix es Daemon. Los demonios normales se pueden encontrar en /etc/init.d/ y se instalan en el nivel de ejecución en el que se supone que deben ejecutarse mediante un enlace simbólico desde los directorios /etc/rc.*.
  2. Solo usa p / invocar como lo harías normalmente. También puede consultar el código fuente de algunos otros proyectos simples basados ​​en mono como Banshee para ver cómo hacen p / invoca en Linux. Solo busca banshee en google.com/codesearch.

Acabo de pasar del desarrollo de .net al desarrollo de LINUX MONO ... y no tengo mucha experiencia con linux dev anteriormente ...

  1. Tengo un requisito para crear un servicio en segundo plano (como servicios de Windows) en mono c # .. ¿Es posible?

  2. Y es posible acceder a las API nativas de LINUX desde mono c #. (como las llamadas winAPI de win c #) ..


En cuanto a LINUX (Unix api), puede usar la biblioteca Mono.UNIX que se incluye con mono. Aunque, como regla general, debe intentar utilizar soluciones portátiles en lugar de Mono.UNix o p / invoke siempre que sea posible.


Para 1. - sí, es posible crear un servicio en segundo plano en mono c #. El servicio es, de hecho, un programa que se ejecuta en segundo plano, no toma ninguna entrada del teclado y el mouse, y no se envía directamente a la pantalla del usuario. Después de crear dicho programa, simplemente puede ejecutarlo con nohup ./programname y configurarlo para que funcione en segundo plano e ignore la señal de suspensión (que se envía a los procesos en ejecución cuando se desconecta).

Si desea integrarlo mejor, debe escribir algunos scripts adicionales para detenerlo, iniciarlo, reiniciarlo, etc. (según la distribución de linux elegida).


Uso scripts, por lo que puedo capturar el código de salida y usarlo para realizar actualizaciones automáticas y cosas. También se reinicia si se bloquea, y le envía un correo electrónico cuando se reinicia con las últimas x líneas del archivo de registro.

/etc/init.d/MyMonoApp

#!/bin/sh #/etc/init.d/MyMonoApp # APP_NAME="MyMonoApp" APP_PATH="/home/mono/MyMonoApp" APP_USER=mono case "$1" in start) echo "Starting $APP_NAME" start-stop-daemon --start / --background / --make-pidfile / --pidfile /var/run/$APP_NAME.pid / --chuid $APP_USER / --exec "$APP_PATH/$APP_NAME" ;; stop) echo "Stopping $APP_NAME" start-stop-daemon -o --stop / --pidfile /var/run/$APP_NAME.pid ;; *) echo "Usage: /etc/init.d/$APP_NAME {start|stop}" exit 1 ;; esac exit 0

/ home / mono / MyMonoApp

#!/bin/sh #!/home/mono/MyMonoApp APP_NAME=`basename $0` APP_DIR=`dirname $0` HOSTNAME=`hostname` cd $APP_DIR tail --lines=300 output.log | mail -s "MyMonoApp $HOSTNAME:$APP_NAME STARTED" "[email protected]" exitcode=0 until [ $exitcode -eq 9 ] do startdate="$(date +%s)" /usr/local/bin/mono MyMonoApp.exe $HOSTNAME:$APP_NAME > output.log exitcode=$? enddate="$(date +%s)" echo "EXIT CODE = $exitcode" >> output.log cp -f output.log output.log.1 elapsed_seconds="$(expr $enddate - $startdate)" echo "Elapsed seconds $elapsed_seconds" subject="EXIT CODE: $exitcode" echo "BASH: Exit Code = $exitcode" if [ $exitcode -eq 6 ] #Restart then subject="RESTART" elif [ $exitcode -eq 7 ] #Previous version then subject="PREVIOUS VERSION" cp -fv MyMonoApp.exe_previous MyMonoApp.exe elif [ $exitcode -eq 8 ] #Update then subject="SOFTWARE UPDATE" cp -fv MyMonoApp.exe MyMonoApp.exe_previous mv -fv MyMonoApp.exe_new MyMonoApp.exe elif [ $exitcode -eq 9 ] #Shutdown then subject="SHUTDOWN" fi if [ $elapsed_seconds -ge 10 ] #been running for longer than 10 seconds then tail --lines=300 output.log | mail -s "MyMonoApp $HOSTNAME:$APP_NAME $subject" "[email protected]" sleep 1 # tiny delay to let things settle else sleep 5 # delay to protect against eating the CPU resourses fi done

Nota: si cierra la aplicación con el script init.d, el proceso se interrumpirá, en lugar de indicarle que se cierre de forma limpia.