Mostrando entradas con la etiqueta procesos. Mostrar todas las entradas
Mostrando entradas con la etiqueta procesos. Mostrar todas las entradas

jueves, 26 de abril de 2012

Trabajos programados en cola - comando "at"


El comando at lo utilizamos si queremos colococar en una cola un trabajo ó tarea para ser ejecutado en un tiempo especifico. La orden at a diferencia de las tareas del cron se ejecuta solo una vez y desaparece de la cola, mientras que las tareas del cron se ejecutan periodicamente en el horario que se le especifique.

Sintaxis

  • at [-V] [-q queue (cola)] [-f file (archivo)] [-mldv (opciones)] tiempo [fecha]
  • El tiempo puede ser: HH:MM se puede colocar el sufijo AM ó PM, midnight (12:00am), noon (12:00pm), or teatime (4:00pm)
  • La fecha se puede especificar de la siguiente manera: MMDDYY, MM/DD/YY, today, tomorrow. Nota: si se coloca solo la hora y no se especifica fecha, se asume como “today” que seria el dia actual.

Ordenes del at

  • atq: despliega los trabajos en cola.
  • atrm numero_trabajo: elimina un trabajo de la cola.

Archivos Generales

/etc/at.allow → Usuario permitidos
/etc/at.deny → Usuarios denegados


Ejemplo

* Creo un trabajo en la cola “c” a ejecutarse el dia de mañana a las 21:55.
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ at -q c 21:55 tomorrow
warning: commands will be executed using /bin/sh
at> free > /home/johnny/Documents/pruebas/carpeta1/carpeta2/free.txt
at> <EOT>
job 9 at Mon Apr 9 21:55:00 2012

* Muestro el trabajo creado.
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ atq
9 Mon Apr 9 21:55:00 2012 c johnny

* Creo dos nuevos trabajos a ejecutarse el dia de hoy. Si no se especifica un numero de cola toma por defecto la cola “a”
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ at 21:57
warning: commands will be executed using /bin/sh
at> uptime > /home/johnny/Documents/pruebas/carpeta1/carpeta2/uptime.txt
at> <EOT>
job 10 at Sun Apr 8 21:57:00 2012
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ atq
10 Sun Apr 8 21:57:00 2012 a johnny
9 Mon Apr 9 21:55:00 2012 c johnny

johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ at 22:00
warning: commands will be executed using /bin/sh
at> date > /home/johnny/Documents/pruebas/carpeta1/carpeta2/date.txt
at> <EOT>
job 12 at Sun Apr 8 22:00:00 2012
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ atq
10 Sun Apr 8 21:57:00 2012 a johnny
9 Mon Apr 9 21:55:00 2012 c johnny
12 Sun Apr 8 22:00:00 2012 a johnny

* Elimino de la cola el trabajo a ejecutarse el dia de Lunes 9 de Abril, trabajo #9.
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ atrm 9
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ atq
10 Sun Apr 8 21:57:00 2012 a johnny
12 Sun Apr 8 22:00:00 2012 a johnny

miércoles, 25 de abril de 2012

Administrador de procesos cron


El cron es un administrador de procesos que se encarga de ejecutar tareas periodicas en un tiempo especifico. Los procesos o tareas que deben ser ejecutados por el demonio cron, se encuentran en el fichero crontab de cada usuario. Estos son procesos que se ejecutan en segundo plano (demonios).


Sintaxis

  • Tiempo de ejecución
      * Minutos (0-59)
      * Horas (0-23)
      * Día del mes (1-31)
      * Meses (1-12) ó (jan, feb, mar, apr, may, jun, jul, aug,sep, oct, nov, dec)
      * Día de la Semana (1-7) ó (mon, tue,wed, thr,fri, sat,sun). El Domingo puede ser el 0 ó el 7.
  • Usuario de ejecución.
  • Comando a ejecutar. (PATH ABSOLUTO)

Se pueden utilizar las siguientes opciones como comodines:

  • Asterisco “*” → Todos
  • Guión “-” → Rango (defino rango o periodo)
  • Coma “,” → Selectivo (defino minutos, horas, meses, dias de la semana en especifico)
  • Intervalos “/” → Intervalos


Opciones a utilizar con el comando crontab

  • -l → Lista el contenido del crontrab
  • -r → elimina el crontab actual
  • -e → crea un nuevo crontab para el usuario en caso de no existir ó edita el crontab actual del usuario.


Archivos Generales

/etc/crontab → Se encuentra el archivo general del sistema
/var/spool/cron/crontabs → Se encuentra el archivo crontab de cada usuario

/etc/cron.allow → Usuario permitidos
/etc/cron.deny → Usuarios denegados

/etc/init.d/cron status → Verifico el estado del proceso cron. Puedo utilizar cualesquier de las siguientes opciones (status, stop, star, restart, reload)


Ejemplo:
A modo de ejemplo colocare la misma tarea a ejecutar, pero en diferentes horarios de modo de practicar la sintaxis del crontab.

  1. Ejecuta la tarea todos los dias, a cada hora, en el minuto 25.
min | hr | dia_mes | mes | dia_semana | usuario | Comando
25     *           *            *        *    cp /home/usuario/prueba/* /tmp/

  1. Ejecuta la siguiente tarea cada 5 minutos.
min | hr | dia_mes | mes | dia_semana | usuario | Comando
*/5 * * * * cp /home/usuario/prueba/* /tmp/

  1. Se ejecuta cada minuto durante los primero 15 minutos, entre las horas 2 y 4 todos los meses, siempre y cuando el dia sea Domingo.
min    |    hr    | dia_mes | mes | dia_semana | usuario | Comando
1-15     2-4          3,7         *          7                   cp /home/usuario/prueba/* /tmp/

Prioridad en los procesos con “nice” y “renice”


Utilizamos las ordenes:

  • nice: para ejecutar un proceso con una prioridad inicial. Su valor por defector es 10.
  • renice: para alterar la prioridad de un proceso ya iniciado.

Las prioridades pueden variar entre -20 y 19, siendo la prioridad negativa la mas alta.

Nota: un usuario no puede iniciar o alterar la prioridad de un proceso a prioridad negativa a menos que sea tenga permisos o sea root.

Sintaxis:

nice -n [prioridad negativa/positiva] orden
renice -n [prioridad negativa/positiva] orden


A continuacion se vera un ejemplo donde ejecutamos varias veces un proceso xclock con distintas prioridades:

- Inicia proceso con prioridad 0
johnny@debianJG:~$ xclock &
[3] 2853

- Inicia proceso con prioridad 10
johnny@debianJG:~$ nice xclock &
[4] 2856

- Inicia proceso con prioridad 5
johnny@debianJG:~$ nice -n 5 xclock &
[5] 2857

- Intenta iniciar proceso con prioridad negativa -5 y nos da un error por no tener permisos, deja prioridad 0.
johnny@debianJG:~$ nice -n -5 xclock &
[6] 2858
johnny@debianJG:~$ nice: cannot set niceness: Permission denied
johnny@debianJG:~$ top
top - 22:29:58 up 1:35, 2 users, load average: 0.11, 0.06, 0.01
Tasks: 157 total, 2 running, 155 sleeping, 0 stopped, 0 zombie
Cpu(s): 5.3%us, 1.2%sy, 0.0%ni, 91.7%id, 1.7%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 2853196k total, 1023116k used, 1830080k free, 264020k buffers
Swap: 1951736k total, 0k used, 1951736k free, 401024k cached

PID PPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2867 2450 johnny 20 0 2456 1116 832 R 4 0.0 0:00.04 top
2858 2450 johnny 20 0 7968 3012 2420 S 0 0.1 0:00.04 xclock
2857 2450 johnny 25 5 7968 3012 2420 S 0 0.1 0:00.04 xclock
2856 2450 johnny 30 10 7968 3012 2420 S 0 0.1 0:00.05 xclock
2853 2450 johnny 20 0 7968 3016 2420 S 0 0.1 0:00.06 xclock


Cambiamos la prioridad del proceso 2853a prioridad negativa -10, usando root.

root@debianJG:~# renice -n -10 2853
2853: old priority 0, new priority -10
johnny@debianJG:~$ top
top - 22:40:15 up 1:46, 2 users, load average: 0.10, 0.06, 0.01
Tasks: 159 total, 2 running, 157 sleeping, 0 stopped, 0 zombie
Cpu(s): 28.5%us, 0.7%sy, 0.0%ni, 70.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2853196k total, 1026396k used, 1826800k free, 264536k buffers
Swap: 1951736k total, 0k used, 1951736k free, 401356k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2858 johnny 20 0 7968 3012 2420 S 0 0.1 0:00.04 xclock
2857 johnny 25 5 7968 3012 2420 S 0 0.1 0:00.05 xclock
2856 johnny 30 10 7968 3012 2420 S 0 0.1 0:00.06 xclock
2853 johnny 10 -10 7968 3016 2420 S 0 0.1 0:00.06 xclock