Deprecated: Function set_magic_quotes_runtime() is deprecated in /home/webcindario/o/s/osmes/web/common.php on line 135
Gigaset HD795T :: Apagado programado
Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Apagado programado
Autor Mensaje
Responder citando Descargar mensaje
Mensaje Apagado programado 
 
ha llegado el momento de poner en práctica lo que sabemos de vi para implementar esta característica.

Para ello tenemos que tener el cron instalado y en marcha, para comprobarlo vamos a entrar en el equipo con telnet y vamos a ejecutar el siguiente comando:

ps | grep cron
  184 root        404 S   /usr/local/etc/opt/sbin/cron
  501 root        308 S   grep cron



Nos tiene que aparecer una línea como la primera (la segunda es simplemente la ejecución de nuestro comando)

Si no aparece o no lo tienes instalado o no lo tienes arrancado.


¿QUE VAMOS A HACER?
Antes de seguir he de advertir que esto puede ser peligroso, y aunque vamos a hacer copias de seguridad del fichero de arranque y una prueba de arranque, si las cosas no se hacen EXACTAMENTE como pongamos aquí, podemos encontrarnos con que el equipo no arranca y tendremos que volver a cargar el firmware.
Así que haz esto bajo tu responsabilidad.

Bien, pues vamos a editar el fichero de arranque que ejecuta el proceso principal, y le vamos a decir que, además de obedecer al mando a distancia, que también recoja las órdenes que le pongamos en un fichero que crearemos, con lo cual todo lo que se ponga en ese fichero se ejecutará como si hubiesemos tecleado algo en el mando.

De esa manera podemos enviar comandos de forma programada usando este fichero, y usando el cron que sirve para ejecutar procesos a una hora determinada y/o de forma periódica, vamos a enviarle al equipo una señal de apagado diariamente (o cuando y como queramos) a la hora que nos apetezca.

Ya sabemos todos entrar con telnet al equipo, pongo aquí el comando una vez mas:

telnet DIRECCION_IP_DEL EQUIPO
.... login: root



1) Nos situamos en el directorio /usr/local/etc

cd /usr/local/etc


2) Hacemos una copia de seguridad del fichero que vamos a "tocar"

cp rcS rcS.orig


3) Editamos el fichero con vi

vi rcS





A partir de ahora estamos dentro del fichero y ejecutaremos comandos de vi ¿OK?

4) Buscamos el arranque del cron

/cron


Esto busca la palabra cron dentro del fichero, se coloca en la linea de estado (inferior) y se ejecuta, si lo encuentra se posiciona el cursor en la línea (si se encuentra y pulsamos n (de next) buscamos la ocurrencia siguiente), si no lo encuentra, aparecerá en la línea de estado el mensaje: Pattern not found
El arranque del cron es una línea así:

/usr/local/etc/opt/sbin/cron


Si ya la tenemos nos saltamos este paso y si no la tenemos la introducimos entre las líneas

ln -s /mnt/dvdvr /dev/dvdvr
y....
# This variable tells DvdPlayer the firmware URL for internet updating


Para ello nos situamos sobre la línea: ln -s ... y ejecutamos el comando o (o minúscula) que nos abrirá una línea en blanco por debajo, copiamos estas líneas desde aquí mismo:

# <CUSTOM01
# Start cron daemon
/usr/local/etc/opt/sbin/cron
# CUSTOM01>


y las pegamos en vi, damos botón derecho sobre el vi, y le damos pegar, para que se inserten las líneas ¿OK?
Cuando tengamos las líneas en el fichero volvemos al modo comando con <ESC>

5) Ahora tenemos que cambiar unas cuantas líneas del fichero (ojo, estoy usando el fichero rcS de la última versión), para lo cual os voy a poner el contenido de un trozo del fichero ANTES de editar y como debe quedar DESPUES de editar:

ANTES DE EDITAR:
/usr/sbin/httpd -h /usr/local/bin/Resource/www -p 80
#/usr/sbin/httpd -h /tmp_orig/www -p 80

CHIPSET="RTD1283"
if [ $CHIPSET = "RTD1183" ]; then
        echo "RTD1183 sleep 3"
        sleep 3
fi

if [ -f $DEFAULT_AP_DIR/DvdPlayer ] && [ -x $DEFAULT_AP_DIR/DvdPlayer ]; then
        cd $DEFAULT_AP_DIR
        if [ -f $DEFAULT_AP_DIR/RootApp ] && [ -x $DEFAULT_AP_DIR/RootApp ]; then
                echo Running dvdplayer with RootApp
                ./RootApp DvdPlayer&
        else
                echo Running dvdplayer
                ./DvdPlayer&
        fi
else
        /etc/dvdplayer/script/run_tail
fi

#Nand doesn't have signature
#SIGNATURE=`dd if=/dev/mtdblock/0 bs=8 count=1`



Las líneas que comienzan por el caracter # son comentarios, yo he marcado todo lo que he añadido nuevo entre líneas:
########## <CUSTOM02
y ....
########## CUSTOM02>
Ahora os pongo en color rojo todo lo que hay que añadir

Citar:
DESPUES DE EDITAR:
/usr/sbin/httpd -h /usr/local/bin/Resource/www -p 80
#/usr/sbin/httpd -h /tmp_orig/www -p 80

########## <CUSTOM02
touch /tmp/command_sender.txt
########## CUSTOM02>


CHIPSET="RTD1283"
if [ $CHIPSET = "RTD1183" ]; then
        echo "RTD1183 sleep 3"
        sleep 3
fi

if [ -f $DEFAULT_AP_DIR/DvdPlayer ] && [ -x $DEFAULT_AP_DIR/DvdPlayer ]; then
        cd $DEFAULT_AP_DIR
        if [ -f $DEFAULT_AP_DIR/RootApp ] && [ -x $DEFAULT_AP_DIR/RootApp ]; then
                echo Running dvdplayer with RootApp
########## <CUSTOM02
#               ./RootApp DvdPlayer&
                tail -f /tmp/command_sender.txt |
./RootApp DvdPlayer&
########## CUSTOM02>
        else
                echo Running dvdplayer
########## <CUSTOM02
#               ./DvdPlayer&
                tail -f /tmp/command_sender.txt |
./DvdPlayer&
########## CUSTOM02>
        fi
else
        /etc/dvdplayer/script/run_tail
fi

########## <CUSTOM02
echo " " >> /tmp/command_sender.txt
########## CUSTOM02>


#Nand doesn't have signature
#SIGNATURE=`dd if=/dev/mtdblock/0 bs=8 count=1`



El último añadido:
########## <CUSTOM02
echo " " >> /tmp/command_sender.txt
########## CUSTOM02>
es para que al arrancar en vez de ir al menú vaya directamente a ver la tele, si no quieres que haga eso, no lo pongas.
Esta es la forma de enviar comandos al equipo cuando queramos, en este caso el comando es el espacio " ", pero podemos mandarle una serie de ellos, podeis ver uan lista de los comandos en: Pág 23 post #344.

6) Para terminar la edición, pulsamos <ESC> y ZZ (dos zetas mayúsculas) para guardar el fichero y salir de vi

7) Ahora vamos a crear con vi el fichero de comandos que ejecutará el cron para detener el equipo

vi shutdown


Nos aparece un fichero en blanco, vamos a insertar el contenido, para ello ejecutamos el comando i (i minúscula) que nos pone en modo texto para insertar, copiamos estas líneas desde aquí mismo:

#!/bin/sh
echo "APAGADO:" `date -R` >> /usr/local/etc/shutdown.log
echo "#" >> /tmp/command_sender.txt
echo "O" >> /tmp/command_sender.txt


y las pegamos en vi, damos botón derecho sobre el vi, y le damos pegar, para que se inserten las líneas ¿OK?
Cuando tengamos las líneas en el fichero volvemos al modo comando con <ESC> y para terminar la edición, pulsamos ZZ (dos zetas mayúsculas) para guardar el fichero y salir de vi

Muy bien ya tenemos el fichero shutdown creado, si quieres ver coma ha quedado usa:

cat shutdown


Este fichero no es ejecutable, vamos a hacer que lo sea:
Vemos como está el fichero con:

ls -l shutdown


Lo hacemos ejecutable

chmod +x shutdown


Y lo volvemos a ver

ls -l shutdown


¿Veis el cambio en la parte de los flags de la izquierda?, tiene que ser algo así:

-rwxr-xr-x    1 root     root          139 Feb 16 16:04 shutdown


9) Ahora vamos a programar el cron para que ejecute nuestro comando, aquí va a intervenir la hora de nuestro sistema, yo lo tengo en +1 y por lo tanto si quiero que me apague a las 3 de la mañana tengo que poner a las 2, esto lo veis simplemente con el comando date para ver la hora real del sistema y "calculeis" lo que teneis que poner en el cron, ejecutais:

date
Thu Feb 17 10:28:01 CST 2011


y comparais el resultado con la hora real, para que sepais a que ateneros, el cron se ejecutará con la hora mostrada por date.
Para ver lo que hay programado en el cron se usa el comando:

crontab -l


Y para añadir y/o modificar algo en el cron se usa el comando:

crontab -e


¿Adivinais con que se editan estas entradas, EXACTO, con vi!!
Nos aparece un fichero en blanco, vamos a insertar el contenido, para ello ejecutamos el comando i (i minúscula) que nos pone en modo texto para insertar, copiamos estas líneas desde aquí mismo:

0 2 * * * /usr/local/etc/shutdown


y las pegamos en vi, damos botón derecho sobre el vi, y le damos pegar, para que se inserten las líneas ¿OK?
Cuando tengamos las líneas en el fichero volvemos al modo comando con <ESC> y para terminar la edición, pulsamos ZZ (dos zetas mayúsculas) para guardar el fichero y salir de vi
Podemos ver el contenido de nuevo con

crontab -l


Ahora vamos a explicar lo que significa cada campo del cron, para que lo podais modificar a vuestro gusto.
En esta página:
Spoiler: [ Mostrar ]



podreis ver una explicación mas exhaustiva, yo os voy a comentar cada campo rápidamente:

# Minute   Hour   Day of Month       Month          Day of Week        Command    
# (0-59)  (0-23)     (1-31)    (1-12 or Jan-Dec)  (0-6 or Sun-Sat)                
    0        2          12             *               0,6           /usr/bin/find



0: Nuestro primer campo es el minuto de ejecución: 0 en este caso
2: Segundo campo, hora de ejecución las 2, como mi sistema va una hora por detrás de la hora real, en realidad se ejecutará a las 3
*: Tercer campo, día del mes, * significa todos, hay otros valores posibles, miradlo en la página
*: Cuarto campo, mes, * significa todos
*: Quinto campo, dia de la semana, * significa todos
/usr/local/etc/shutdown: Sexto campo, comando a ejecutar, en este caso nuestro comando previamente creado.

Yo acabaré poniendo una hora para cada dia de la semana, según lo que se grabe, el cron puede tener muchos comandos para ejecutar a distintas horas y de distintas formas, cada línea es un comando, pero puede haber muchas...

ADVERTENCIA! a lo mejor el cron no se ejecuta el primer día, no desespereis, se debería ejecutar al menos a partir del segundo día y siguientes. A mi siempre me ha hecho esta jugarreta...

10) Ahora vamos a ejecutar un proceso que simulará el arranque del sistema con nuestro nuevo fichero rcS. con esto intentaremos evitar cuelgues en el arranque y que tengamos que instalar el firmware de nuevo, si funciona, podremos arrancar mas tranquilamente y si no funciona, podremos volver a recuperar nuesta copia original del rcS, ¿OK?
Estamos situados en el directorio /usr/local/etc

Detenemos todos los procesos, ojo, esto "apagará" el equipo y dejará de verse, de tal forma que el único control lo tendremos desde la sesión de telnet, no hay que desconectarse de telnet bajo ningún concepto.

stopall


Ahora vereis como se detiene todo con una ristra de mensajes, comprueba que el equipo está "muerto" y no se ve nada en la pantalla, pero tiene la luz azul.

Para probar nuestro fichero ejecutamos:

./rcS


Otra ristra de mensajes de arranque (mas larga), y al final el equipo tiene que arrancar perfectamente (con tranquilidad, dale su tiempo).
En cualquieer caso, pueden aparecer unos mensajes iguales cada poco tiempo que no dejan teclear nada, no te preocupes es normal.
Si el equipo ha arrancado bien, significa que tu fichero rcS es válido, si no, hay que volver a la versión original.


SI EL EQUIPO NO ARRANCA:
Páralo de nuevo tecleando:
stopall y <RETORNO>
teclealo rápido entre los mensajes que aparecen, no te preocupes si lo tecleas entre ellos, algo así como:
sto
mensaje
pal
mensaje
l<RETORNO>


Ahora vamos a intentar recuperar el fichero original con

cp rcS.orig rcS


y lo volvemos a probar con

./rcS


Cuando el equipo arranque (se vea el contenido en la pantalla del televisor), podemos apagarlo y arrancarlo de nuevo
Al usar el stopall, puede que el equipo se "niegue" a apagarse, en ese caso podemos desenchufarlo y volverlo a enchufar, pero siempre que nos hayamos asegurado que nuestro fichero rcS arranca perfectamente, con los pasos anteriores.

Por cierto, le he puesto un log al proceso, para que podamos ver cuando se ha ejecutado, para ello, cuando todo esté en marcha, podemos ver de vez en cuando como va todo, entrando con telnet y ejecutando:

more /usr/local/etc/shutdown.log


con eso veremos si ha funcionado el shutdown y a que hora se ha hecho.

Como es lógico yo NO he podido probar todas las combinaciones que se puedan producir, y esta es la forma de comprobarlo, pero lo mejor es que reviseis todo lo que tecleeis en el vi varias veces antes de darlo por bueno, TODO es importante, los espacios entre palabras, las mayúsculas y minúsculas, los distintos tipos de comillas, los símbolos... Lo dicho miradlo con lupa.

Como podeis ver este con este "tocho" he querido tener en cuenta todos los posibles problemas que podeis encontraros, parece mucho pero al final son cuatro cosas, pero he preferido explicaroslo (con mucho curre), en vez de poneros los ficheros y deciros copiar esto en tal sitio y andando.

Por favor, si encontrais alguna errata o algún problema decidlo cuanto antes para poder corregirlo, y si os funciona, podeis comentarlo en el foro para comprobar que funciona.

Buen trabajo, y buena suerte.


Gracias a Carva.
 





____________________
.

Reportar algún error, ya sea de descargas u otro motivo, gracias.


.
 
Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:   
Ocultar¿Este tema fue útil?
Compartir este tema
blinkslist.com blogmarks.net co.mments.com del.icio.us digg.com newsvine.com facebook.com fark.com feedmelinks.com furl.net google.com linkagogo.com ma.gnolia.com meneame.net netscape.com reddit.com shadows.com simpy.com slashdot.org smarking.com spurl.net stumbleupon.com technorati.com favorites.live.com yahoo.com DIGG ITA Fai Informazione KiPapa Ok Notizie Segnalo Bookmark IT
Enlazar este tema
URL
BBCode
HTML

Publicar nuevo tema  Responder al tema  Página 1 de 1
 




 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron