jueves, 2 de junio de 2011

Procesos en background, jobs y nohup

La mayoría de los comandos se ejecutan rapidamente como lo es ls o cd , pero hay algunos que tardan bastante tiempo, por ejemplo el estar copiando archivos a otro directorio, por lo cual es necesario esperar y esperar y esperar.

En el escenario descrito, la mayoría de los usuarios optarían por terminar el proceso con ctrl + c ,pero se puede suspender utilizando ctrl + z y mandarlo a un segundo plano (background), para hacer otras tareas.

Quizas suene algo confuso pero es bastante sencillo,veamos algunos ejemplos:

--Mandar un proceso a background

--Precionamos ctrl + z, para suspenderlo
oscar@ubuntu:/proc$ teamviewer
^Z
[1]+ Detenido teamviewer

--Listamos los jobs, y veremos que esta el que acabamos de suspender
oscar@ubuntu:/proc$ jobs
[1]+ Detenido teamviewer

--Lo mandamos a backgroung para ejecutarlo
oscar@ubuntu:/proc$ bg %1
[1]+ teamviewer &

--Listando los jobs, vemos que ya no esta suspendido y que esta trabajando
oscar@ubuntu:/proc$ jobs
[1]+ Ejecutando teamviewer &

--Asi podriamos tener muchos procesos trabajando en background :
oscar@ubuntu:/proc$ jobs
[1] Ejecutando teamviewer &
[2]- Detenido gedit
[3]+ Detenido top

oscar@ubuntu:/proc$ bg %2
[2]- gedit &

oscar@ubuntu:/proc$ jobs
[1] Ejecutando teamviewer &
[2]- Ejecutando gedit &
[3]+ Detenido top

--Si deseamos MATAR un job en ejecución
oscar@ubuntu:/proc$ kill %1

oscar@ubuntu:/proc$ jobs
[1] Terminado teamviewer
[2]- Ejecutando gedit &
[3]+ Detenido top



Ahora, si analizamos vemos que se necesitan 3 pasos para poner un proceso en background, pero podemos
hacerlo solo con 1 poniendo ampersand al final de un comando, para mandarlo directamente a background:

--Mandar proceso directamente a background
proc$ gedit &
[4] 2565

--Vemos que al listarlo, ya aparece como un job
oscar@ubuntu:/proc$ jobs
[1] Ejecutando teamviewer &
[2] Ejecutando gedit &
[3]+ Detenido top
[4]- Hecho gedit

--Para regresar un proceso de backgrond a la terminal usamos "fg" con el numero del job
oscar@ubuntu:/proc$ fg %2

Nota: si cerramos la terminal o sesion , todos los jobs se finalizaran.

Para evitar esto, se utiliza el comando "nohup" de esta manera se manda el proceso a background
y queda inmune a los hangups (de ahí su nombre nohup) que es cuando se cuelga
o termina la terminal o consola de la cual se ejecutó el proceso.

oscar@ubuntu:/proc$ nohup firefox

jueves, 26 de mayo de 2011

Mantener una session SSH activa

O genial, por fin una solución bastante sencilla a este problema,
pues suele pasar que estamos conectados a un servidor usando ssh y MOCOS!!! se pierde la conexión , y hay q volver a conectarse y exportar variables o levantar servicios, para evitar esto , basta con hacer:

vi /etc/ssh/ssh_config
y agregar la línea

ServerAliveInterval 60

Con el número 60 indicamos que cada minuto se envien datos al servidor para mantener viva la conexión!!!!!!


FUENTE: http://www.lopst.com/?p=784

martes, 26 de abril de 2011

DEDOS CHUECOS


Para aquellos que tienen los dedos chuecos como yo, y en ocaciones escriben "sl" en lugar de "ls" , pues aqui tienen un tren

Para instalar este paquete solo hay que hacer:

#apt-get install sl







O si quieren ver una vaca que habla, hagan:

#apt-get cowsay

y ejecuten:

$cowsay hola campeones, y saldrá una vaca

< hola campeones >
------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||


rlwrap

Algo que puede llegar a ser bastante molesto es volver a escribir una consulta, sobre todo cuando son muy largas, cosa que si puede ocacionar extrañar a WINDOWS!!!( Dios no lo quiera) para esto exite rlwrap :D

#apt-get install rlwrap

Después de esto solo agregamos una línea a nuestro bash :p

#
vi ~/.bashrc

alias sqlplus='rlwrap sqlplus'


Y LISTO!!!!!!!!!!!!!!!!!!!!!!!!!!!
Tenemos nuestro Buffer en nuestra sagrada terminal al momento de usar Linux

~/.bashrc, ~/.bash_profile, /etc/bashrc, /etc/profile

Bien en muchas ocaciones es necesario crear alias, o exportar alguna variable, y es aqui donde entra la duda "en que archivo lo hago", bien es muy fácil:

Si queremos que estos cambios o alias se apliquen a TODOS LOS USUARIOS,

/etc/bashrc Se ejecuta cada vez que se ejecuta el programa bash
/etc/profile Se ejecuta cuando los usuarios inician sesión

Si queremos que estos cambios o alias se apliquen a SOLO UN USUARIO, tendriamos que editar alguno de estos archivos:

~/.bashrc Se ejecuta cada vez que iniciamos el programa bash
~/.bash_profile Se ejecuta cuando el usuario inicia sesión

NOTA: Recordemos que el caracter ~ significa que estamos en el home de un usuario, en otras palabras si somos el usuario oracle ~ significa /home/oracle

lunes, 25 de abril de 2011

ORA-00132

Al tratar de iniciar la base de datos Oracle muestra el siguiente error:

SQL> startup
ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00132: syntax error or unresolved network name 'LISTENER_OPROD3'


Bien si observamos un poco, vemos que esta marcando errores de sintaxis, lo que debemos hacer es lo siguiente:

1.-Editar el archivo tnsnames.ora
vi $ORACLE_HOME/network/admin/tnsnames.ora

2.-Agregar los datos del listener que está marcando error, en mi caso agrego la siguiente línea:

LISTENER_OPROD3 =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

y listo


miércoles, 20 de abril de 2011

Insertar millones de datos aleatorios en Oracle

Bien, hay bastantes entradas en Internacho sobre este tema, solo pondré un script para insertar y millon y medio de registros en una tabla:

begin
for i in 1..1500000 loop

insert into pruebas2 values(

i,
dbms_random.string('U', 200),
ROUND(DBMS_RANDOM.VALUE(1,1000000000)),
to_date(trunc(dbms_random.value(2454867,2455598)), 'J'),
EMPTY_BLOB()

--Opcional para hacer commit cada 1,000 registros

if mod(i,1000)=0 then
commit;
end if;
end loop;
end;
/