Archive for the ‘ Linux ’ Category

Evitando solapamientos en cron con lockrun

Es algo muy común que programemos una tarea en cron periódica cada x tiempo, todo debe funcionar bien para tiempos relativamente grandes, p.e tareas diárias, semanales, etc.

Pero para tiempos pequeños, ¿quién nos garantiza que dicha tarea va a ejecutarse en menos de ese x tiempo?

Un ejemplo más ilustrativo, supongamos el caso de una tarea que actualiza el índice de un motor de búsqueda, para tenerlo lo más reciente posible lo actualizaremos cada minuto.

Dicha tarea puede ser que tarde más de un minuto en ejecutarse, debido a la carga de trabajo de la misma, ¿qué ocurre entonces? ¡Exacto! Se solapan las ejecuciones de la tarea…

Si esto ocurre, es posible que las distintas instancias corrompan algún fichero que modifiquen o, es más, que nos saturen los servidores.

Para esto existe la solución lockrun, bloqueo de ejecución, consiste en un pequeño programita el cual se encargará de gestionar las ejecuciones de dicha tarea.

Para hacer uso de él simplemente descargar lockrun.c de aquí; http://www.unixwiz.net/tools/lockrun.html

Compilar con gcc lockrun.c -o lockrun y luego copiar el ejecutable a /usr/local/bin/.

Hecho estos sólo tendremos que añadir a nuestras tareas en crontab /usr/local/bin/lockrun –lockfile=/var/run/tarea.lock — <tarea> y el solito se encargará de gestionar dichas ejecuciones :)

Recuperar contraseñas almacenadas en Gnome Keyring

Ufff, que abandona tengo esto… publico aquí un script para recuperar las contraseñas almacenadas en nuestro Gnome Keyring, puede servir de utilidad si no recordamos la contraseña de cualquier sitio o incluso de una red wifi.

Lo he sacado de http://blog.schmichael.com/2008/10/30/listing-all-passwords-stored-in-gnome-keyring/

 

#!/usr/bin/env python
 
import pygtk
pygtk.require('2.0')
import gtk # sets app name
import gnomekeyring
 
def hack():
    for keyring in gnomekeyring.list_keyring_names_sync():
        for id in gnomekeyring.list_item_ids_sync(keyring):
            item = gnomekeyring.item_get_info_sync(keyring, id)
            print '[%s] %s = %s' % (
                    keyring, item.get_display_name(), item.get_secret())
        else:
            if len(gnomekeyring.list_item_ids_sync(keyring)) == 0:
                print '[%s] --empty--' % keyring
 
if __name__ == '__main__':
    hack()

Reconfiguring locales

Este error con las localizaciones suele ser bastante común en instalaciones de Ubuntu server;

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LANG = "es_ES.utf8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

Solución;

export LC_ALL="C"
dpkg-reconfigure locales
locale-gen

Bastante simple, ¿no?