tagger tag puddletag mp3tag mac kid3 editar easytag linux

linux - mp3tag - puddletag



Cómo asegurarse de que una aplicación siga ejecutándose en Linux (15)

Estoy tratando de garantizar que un script siga ejecutándose en un servidor de desarrollo. Coteja las estadísticas y proporciona un servicio web, por lo que se supone que persiste; sin embargo, algunas veces al día, se apaga por razones desconocidas. Cuando nos damos cuenta de que solo lo lanzamos de nuevo, pero es un dolor en la parte trasera y algunos usuarios no tienen permiso (o el know-how) para lanzarlo.

El programador que hay en mí quiere pasar unas pocas horas hasta llegar al fondo del problema, pero la persona ocupada que hay en mí piensa que debe haber una forma fácil de detectar si una aplicación no se está ejecutando y volver a ejecutarla.

Sé que podría programar cron los ps a través de grep:

ps -A | grep appname

Pero, una vez más, esa es otra hora de mi vida desperdiciada en hacer algo que ya debe existir ... ¿No hay una aplicación prefabricada que pueda pasar un ejecutable (opcionalmente con argumentos) y eso mantendrá un proceso ejecutándose indefinidamente?

En caso de que haga alguna diferencia, es Ubuntu.


Creo que una mejor solución es si también pruebas la función. Por ejemplo, si tuvo que probar un apache, no es suficiente solo para probar, si existen procesos "apache" en el sistema.

Si desea probar si apache es correcto, intente descargar una página web simple y pruebe si su código único está en la salida.

De lo contrario, elimine el apache con -9 y luego reinicie. Y envíe un correo a la raíz (que es una dirección de correo reenviado a las raíces de la empresa / servidor / proyecto).


Echa un vistazo a '' nanny '' a la que se hace referencia en el Capítulo 9 (p197 o menos) de "Unix Hater''s Handbook" (una de varias fuentes para el libro en PDF).


Es aún más simple:

#!/bin/bash export DISPLAY=:0 process=processname makerun="/usr/bin/processname" if ! pgrep $process > /dev/null then $makerun & fi

Sin embargo, debe recordar para asegurarse de que processname sea único.


Es un trabajo para un DMD (Daemon Monitoring Daemon). hay algunos alrededor; pero normalmente solo escribo un script que comprueba si el daemon se está ejecutando, y lo ejecuta si no, y lo pongo en cron para que se ejecute cada minuto.


He usado de cron "killall -0 nombre de programa || /etc/init.d/programname start". matar será un error si el proceso no existe. Si existe, enviará una señal nula al proceso (que el núcleo ignorará y no se molestará en transmitir).

Este idioma es simple de recordar (en mi humilde opinión). En general, uso esto cuando todavía estoy tratando de descubrir por qué el servicio en sí está fallando. En mi humilde opinión, un programa no debería simplemente desaparecer inesperadamente :)


He utilizado un script simple con cron para asegurarme de que el programa se está ejecutando. Si no es así, entonces lo pondrá en marcha. Puede que esta no sea la solución perfecta que está buscando, pero es simple y funciona bastante bien.

#!/bin/bash #make-run.sh #make sure a process is always running. export DISPLAY=:0 #needed if you are running a simple gui app. process=YourProcessName makerun="/usr/bin/program" if ps ax | grep -v grep | grep $process > /dev/null then exit else $makerun & fi exit

Luego agregue un trabajo cron cada minuto, o cada 5 minutos.


La herramienta de supervise de daemontools sería mi preferencia, pero luego todo lo que Dan J Bernstein escribe es mi preferencia :)

http://cr.yp.to/daemontools/supervise.html

Debe crear una estructura de directorios particular para su secuencia de comandos de inicio de la aplicación, pero es muy fácil de usar.


No pude conseguir que la solución de Chris Wendt funcionara por alguna razón, y fue difícil de depurar. Este es más o menos el mismo, pero más sencillo de depurar, excluye bash de la coincidencia de patrones. Para depurar solo ejecuta: bash ./root/makerun-mysql.sh . En el siguiente ejemplo con mysql-server simplemente reemplace el valor de las variables para process y makerun para su proceso.

  • Cree un script BASH como este ( nano /root/makerun-mysql.sh ):

#!/bin/bash process="mysql" makerun="/etc/init.d/mysql restart" if ps ax | grep -v grep | grep -v bash | grep --quiet $process then printf "Process ''%s'' is running./n" "$process" exit else printf "Starting process ''%s'' with command ''%s''./n" "$process" "$makerun" $makerun fi exit

  • Asegúrese de que sea ejecutable agregando los permisos de archivo adecuados (es decir, chmod 700 /root/makerun-mysql.sh )

  • A continuación, agregue esto a su crontab ( crontab -e ):

# Keep processes running every 5 minutes */5 * * * * bash /root/makerun-mysql.sh


Ponga su ejecución en un bucle, por lo que cuando sale, se ejecuta de nuevo ... mientras (verdadero) {ejecuta mi aplicación ..}


Puede hacer que sea un servicio lanzado desde inittab (aunque algunos Linux han pasado a algo más nuevo en /etc/event.d). Estos sistemas integrados aseguran que su servicio siga funcionando sin escribir sus propios scripts o instalar algo nuevo.


Si está utilizando una distribución basada en el sistema como Fedora y versiones recientes de Ubuntu, puede usar la función "Restart" de systemd para los servicios. Se puede configurar como un servicio de sistema o como un servicio de usuario si necesita ser administrado y ejecutado como un usuario particular, lo cual es más probable en la situación particular de OP.

La opción Reiniciar toma uno de los siguientes: no on-success , on-failure , on-abnormal , on-watchdog , on-abort o always .

Para ejecutarlo como usuario, simplemente coloque un archivo como el siguiente en ~/.config/systemd/user/something.service :

[Unit] Description=Something [Service] ExecStart=/path/to/something Restart=on-failure [Install] WantedBy=graphical.target

entonces:

systemctl --user daemon-reload systemctl --user [status|start|stop|restart] something

No se necesitan privilegios / modificaciones de raíz de los archivos del sistema, no se necesitan trabajos cron, no hay nada que instalar, flexibles como el infierno (consulte todas las opciones de servicio relacionadas en la documentación).

Consulte también https://wiki.archlinux.org/index.php/Systemd/User para obtener más información sobre el uso de la instancia del sistema por usuario.


Una buena y sencilla forma de hacerlo es la siguiente:

  1. Escriba su servidor para que muera si no puede escuchar en el puerto que espera
  2. Establezca un cronjob para intentar iniciar su servidor cada minuto

Si no se está ejecutando, se iniciará y, si se está ejecutando, no lo hará. En cualquier caso, su servidor siempre estará activo.


Ya que está usando Ubuntu, puede estar interesado en Upstart , que ha reemplazado al init sysV tradicional. Una característica clave es que puede reiniciar un servicio si muere inesperadamente. Fedora se ha movido al advenedizo, y Debian está en fase experimental, por lo que puede valer la pena investigarlo.

Sin embargo, esto puede ser excesivo para esta situación, ya que un script cron tardará 2 minutos en implementarse.

#!/bin/bash if [[ ! `pidof -s yourapp` ]]; then invoke-rc.d yourapp start fi


antes que nada, ¿cómo comienzas esta aplicación? ¿Se bifurca al fondo? ¿Se comenzó con nohup .. & etc? Si es el último, comprueba por qué murió en nohup.out, si es el primero, compila el registro.

En cuanto a su pregunta principal: puede cron, o ejecutar otro proceso en segundo plano (no la mejor opción) y usar pidof en un bashscript, bastante fácil:

if [ `pidof -s app` -eq 0 ]; then nohup app & fi


Monit es perfecto para esto :)

Puede escribir archivos de configuración simples que le indiquen a monit que mire, por ejemplo, un puerto TCP, un archivo PID, etc.

monit ejecutará un comando que usted especifique cuando el proceso que está monitoreando no está disponible / usando demasiada memoria / está conectando la CPU demasiado tiempo / etc. También aparecerá una alerta por correo electrónico que le informará qué sucedió y si podría hacer algo al respecto.

Lo utilizamos para mantener una carga de nuestros sitios web en funcionamiento mientras nos avisa con anticipación cuando algo va mal.

- Su fiel empleado, Monit