domingo, 26 de noviembre de 2017

TAREAS PROGRAMADAS

Linux tiene un dominio cron que normalmente se ejecuta en el arranque de linux. Este dominio despierta cada minuto, mira si tiene que ejecutar alguna tarea, la ejecuta y se duerme. Si queremos que algún comando o tarea se ejecute automáticamente cada cierto tiempo, la forma de hacerlo es indicándole a este dominio que lo haga.
Hay varios ficheros en el sistema operativo y para cada usuario en el que este dominio busca tareas para ejecutar. Uno de ellos es /etc/crontab. El formato de este fichero es:
minuto hora dia_del_mes mes dia_de_la_semana usuario comando

Donde minuto, hora, dia_del_mes, mes y dia_de_la_semana son lo que parecen, a qué hora, minuto, etc. Se debe ejecutar el comando. En estos campos se pueden poner comodines y hay varios formatos. Por ejemplo, un * en minuto es en todos los minutos:
  • * 4 * * *    significa todos los minutos de las cuatro de la madrugada, todos los días, todos los meses. Es decir, se ejecuta 60 veces a las 4:00 am, 4:01 am,... 4:59 am y ya no más hasta el día siguiente.


También se pueden poner rangos o valores discretos, así:
  • 10,20,30 * * * * significa todos los días a todas las horas en los minutos 10, 20 y 30, es decir, a las 0:10 am, 0:20 am, 0:30 am, 1:10 am, 1:20 am, etc.
  • */15 10-14 * * * significa cada 15 minutos entre las 10 am y las 2 pm (las 14).


Y así un largo etcétera.
Un ejemplo concreto de lo que puede haber en un crontab:
  • 0 0 * * 6 root rm -rf /home/usuario/temp


Borraría todos los sábados (día 6) a las 0:00 horas el directorio /home/usuario/tmp.
Un usuario puede crear sus propias tareas y añadirlas a cron. Para ello, en cualquier ubicación crea un fichero similar a crontab con el nombre que quiera y sin poner el usuario. Por ejemplo:
  • 0 11 * * 1-5 avisameParaElCafe.sh


Ejecutaría todos los días de lunes a viernes (1-5) a las 11:00 am el comando "avisameParaElCafe.h". Si este fichero se llama mi_cron, entonces para añadir estas tareas al demonio de cron hay que ejecutar el comando:
  • crontab mi_cron


SEÑALES ENTRE PROCESOS

Los procesos en el sistema operativo están unívocamente identificados mediante un PID, o Process Identifier. El PID es un número entero que identifica a cada uno de los procesos del sistema, de una manera a la que Linux nos tiene acostumbrados, puesto que casi todos los elementos del sistema se identifican numéricamente (procesos, archivos, directorios, dispositivos, etc.).

Los tipos de señales son:

  •   SIGHUP: El modem ha detectado línea telefónica colgada
  •   SIGINT: Interrupción de teclado, la tecla DEL ha sido pulsada
  •   SIGQUIT: Señal Quit (desde el teclado CTRL \)
  •  SIGILL: Instrucción ilegal
  •   SIGTRAP: Traza de los traps (excepciones)
  •   SIGABRT: Abortar un programa
  •   SIGBUS: Error en el Bus
  •   SIGFPE: Excepción por rebosamiento de coma flotante
  •   SIGKILL: Matar un proceso
  •  SIGUSR1: El usuario define la señal # 1
  •  SIGSEGV: Violación de segmentación
  •  SIGUSR2: El usuario define la señal # 2
  •  SIGPIPE: Escritura en pipe sin lectores
  •  SIGALRM: Alarma
  •  SIGTERM: Software genera una señal de terminación
  •  SIGSTKFLT: Fallo en el stack
  •  SIGCHLD: Cambia el estado del hijo, terminado o bloqueado
  •  SIGCONT: Si está bloqueado continuarGSTOP: Señal de paro
  •  SIGTSTP: Paro del teclado
  •  SIGTTIN: Proceso en segundo plano quiere leer, lectura terminal
  • SIGTTOU: Proceso en segundo plano quiere escribir, escritura terminal
  • SIGURG: Condición urgente
  • SIGXCPU: Excedido el límite de la CPU
  • SIGXFSZ: Excedido el límite del tamaño de un fichero
  • SIGVTALRM: Alarma del reloj virtual
  • SIGPROF: Historial del reloj
  • SIGWINCH: Cambia el tamaño de la ventana
  • SIGIO: Ahora es posible la entrada salida
  • SIGPWR: Fallo en la alimentación
  • SIGSYS: Llamada al sistema errónea
  • SIGRTMIN: Primera señal en tiempo real



PROCESOS DE LINUX

Tipos de procesos en Linux: Child, daemon, orphan y zombie.

Los procesos son algo fundamental en un sistema operativo. Casi todas las actividades de un sistema hacen uso de procesos para llevar a cabo sus tareas. De hecho, gracias a los procesos el sistema operativo está "operativo", es decir, funcionando correctamente y por un gran puñado de ellos el mismo nos tiene disponible de forma instantánea los recursos físicos (hardware) de nuestra computadora.

Es muy probable que al utilizar el comando top para visualizar los procesos activos del sistema te hayas fijado que en la parte superior hay una línea que dice cuántos procesos en total hay en ejecución, cuántos están dormidos (sleeping), detenidos (stopped) y zombie. Estas denominaciones hacen referencia a los estados de dichos procesos en un momento determinado. A continuación, describiremos los diferentes procesos por su tipo o estado.

Child (hijos)

Son procesos creados por otro proceso durante su ejecución. Usualmente los procesos child son creados para ejecutar un binario desde un proceso existente, con la llamada del sistema fork (). Los procesos normalmente son creados para ejecutarse a través de un shell o terminal. En dicho caso el shell se convierte en proceso padre y el proceso ejecutado se convierte en hijo. En sistemas tipo Unix/Linux cada proceso tiene un padre excepto el proceso init.

Daemon (demonios)

Son tipos especiales de procesos que se ejecutan en segundo plano y están relacionados con el sistema operativo y no tienen shell asociado. Estos corren con permisos de root y usualmente proveen servicios. El no tener shell asociado se logra separando el proceso del shell, creando un proceso nuevo y terminando el proceso padre (el shell que lo inició). Desde el momento en que su proceso padre es terminado el proceso de hace independiente (ya no es más un proceso child) y es tomado por el proceso init el cual lo convierte en un daemon.

Orphan (huérfanos)

Usualmente un proceso crea un proceso hijo (child) y cuando el proceso hijo termina una señal es emitida al proceso padre para que pueda hacer todo lo requerido cuando el proceso hijo es terminado. Pero hay situaciones en las que los procesos padres son matados (killed). En dicho caso el proceso hijo queda huérfano y entonces es tomado por el proceso init. Aun así, el proceso cuyo padre fue matado sigue siendo llamado huérfano ya que su padre original no existe.

Zombie

Cuando un proceso child o hijo es terminado o es completada su ejecución, luego su entrada en la tabla de procesos se mantiene hasta que el proceso padre obtenga la información del estado del proceso hijo terminado. Hasta entonces el proceso terminado entra en estado zombie y es conocido como proceso zombie. Cuando un proceso es terminado toda la memoria y recursos asociados con dicho proceso son liberados pero la entrada del mismo en la tabla de procesos aún existe. Una seña SIGCHILD es enviada al proceso padre (ha sido terminado). Comúnmente el manejador de esta señal en el proceso padre ejecuta una llamada de espera que obtiene el estado de salida del proceso terminado y entonces la entrada del proceso zombie es borrada de la tabla de procesos.

GESTIÓN DE VENTANAS

Un gestor de ventanas o manejador de ventanas es un programa informático que controla la ubicación y apariencia de las ventanas bajo un sistema de ventanas en una interfaz gráfica de usuario. Las acciones asociadas al gestor de ventanas suelen ser, abrir, cerrar, minimizar, maximizar, mover, escalar y mantener un listado de las ventanas abiertas.


Es también muy común que el gestor de ventanas integre elementos como: el decorador de ventanas, un panel, un visor de escritorios virtuales, iconos y un tapiz.Las plataformas Windows, Haiku os(software libre MIT) y Mac OS X ofrecen un gestor de ventanas estandarizado por sus vendedores y/o desarrolladores e integrado en el propio sistema operativo. En cambio el sistema gráfico X Window, popular en el ámbito de sistemas Unix y similares, como GNU/Linux, permite al usuario escoger entre varios gestores. Los gestores de ventanas difieren entre sí de muchas maneras, incluyendo apariencia, consumo de memoria, opciones de personalización, escritorios múltiples o virtuales y similitud con ciertos entornos de escritorio ya existentes, entre otras.


ENTORNO GRÁFICO XWINDOWS / X11

El X Window System o sistema X Window (Window, no Windows), normalmente llamado las X, es elentorno gráfico de los sistemas UNIX. Creado en el MIT en 1984, posteriormente se han encargado de su desarrollo y mantenimiento diversos consorcios de fabricantes (X Consortium, Open Group, X.org Foundation). Actualmente se encuentra en su versión 11.6, por lo que se suele denominar X11 o X11R6.
FreeDesktop (freedesktop.org) promueve estándares de escritorio para que aplicaciones de distinta procedencia interactúen correctamente entre sí.
El sistema X Window se encarga de mostrar la información gráfica, está construido con arquitectura cliente-servidor y es una capa totalmente independiente del Sistema Operativo. Cuando instalemos en una máquina el sistema X Window se instalarán tres componentes:

  1. el servidor X: es el servidor gráfico.
  2. el display manager: se encarga del login gráfico.
  3. el cliente X (o window manager): es el cliente gráfico.



CONFIGURACIÓN DEL ENTORNO (VARIABLES)

Hay varios métodos para añadir variables de entorno en linux. Normalmente existen diferentes scripts que se ejecutan en diferentes eventos, por ejemplo, cuando un usuario se loguea en el sistema se ejecuta un archivo llamado .bashrc. Este es un archivo de sistema que se encuentra en la carpeta del usuario /home/usuario/.bashrc
Este script es un buen lugar para añadir la variable de entorno. Aunque también existen otros siios.

En este ejemplo veremos cómo añadir una ruta a la variable de entorno PATH, que es una variable común para asignar rutas de aplicaciones y comandos que se instalan en el sistema.

Podemos usar cualquier editor para modificar los datos, por ejemplo:

  • vim /home/nombreusuario/.bashrc


Para evitar sobreescribir esta variable (es posible que se haya definido en otro sitio), podemos hacerlo de añadiendo esta línea al final del archivo:

  • export PATH=$PATH:/directorio1:/directorio2:...:/directorioN


Para que los cambios surtan efecto podemos reiniciar sesión con ese usuario al que le hemos editado el archivo o bien podemos usar el comando de linux source:

  • source /home/nombreusuario/.bashrc


Para probar que se ha guardado correctamente podemos escribir:


  • $PATH

PRINCIPALES ORDENES DE LINUX

El conocimiento de los comandos Linux es importante para las tareas de administración y programación. Los comandos Linux son necesarios para tener un dominio del sistema operativo. La línea de comandos es la manera más directa de enviar órdenes a su máquina. La línea de comandos de GNU/Linux es más potente que los prompts que puede haber usado con anterioridad.


  • Comandos Linux de archivos y directorios
  • Comandos Linux de ficheros y directorios, crear y borrar directorios; listar, copiar, renombrar y borrar archivos, crear enlace entre archivos