Deprecated: Function set_magic_quotes_runtime() is deprecated in /home/webcindario/o/s/osmes/web/common.php on line 135
http://osmes.webcindario.com/viewtopic.php?f=21&t=109 ----------------------------------- Yodeima 20.09.2011 10:15 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: [code linenumbers=false]ps | grep cron 184 root 404 S /usr/local/etc/opt/sbin/cron 501 root 308 S grep cron[/code] 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: [code linenumbers=false]telnet DIRECCION_IP_DEL EQUIPO .... login: root[/code] 1) Nos situamos en el directorio /usr/local/etc [code linenumbers=false]cd /usr/local/etc[/code] 2) Hacemos una copia de seguridad del fichero que vamos a "tocar" [code linenumbers=false]cp rcS rcS.orig[/code] 3) Editamos el fichero con vi [code linenumbers=false]vi rcS[/code] [b][color=red]A partir de ahora estamos dentro del fichero[/color][/b] y ejecutaremos comandos de vi ¿OK? 4) Buscamos el arranque del cron [code linenumbers=false]/cron[/code] 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í: [code linenumbers=false]/usr/local/etc/opt/sbin/cron[/code] Si ya la tenemos nos saltamos este paso y si no la tenemos la introducimos entre las líneas [code linenumbers=false]ln -s /mnt/dvdvr /dev/dvdvr y.... # This variable tells DvdPlayer the firmware URL for internet updating[/code] 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: [code linenumbers=false]# [/code] 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 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: [code linenumbers=false]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` [/code] Las líneas que comienzan por el caracter # son comentarios, yo he marcado todo lo que he añadido nuevo entre líneas: ########## Ahora os pongo en color rojo todo lo que hay que añadir [quote]DESPUES DE EDITAR: /usr/sbin/httpd -h /usr/local/bin/Resource/www -p 80 #/usr/sbin/httpd -h /tmp_orig/www -p 80 [color=red]########## [/color] 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 [color=red]########## [/color] else echo Running dvdplayer [color=red]########## [/color] fi else /etc/dvdplayer/script/run_tail fi [color=red]########## > /tmp/command_sender.txt ########## CUSTOM02>[/color] #Nand doesn't have signature #SIGNATURE=`dd if=/dev/mtdblock/0 bs=8 count=1`[/quote] El último añadido: ########## > /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 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 [code linenumbers=false]vi shutdown[/code] 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: [code linenumbers=false]#!/bin/sh echo "APAGADO:" `date -R` >> /usr/local/etc/shutdown.log echo "#" >> /tmp/command_sender.txt echo "O" >> /tmp/command_sender.txt[/code] 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 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: [code linenumbers=false]cat shutdown[/code] 8) Este fichero no es ejecutable, vamos a hacer que lo sea: Vemos como está el fichero con: [code linenumbers=false]ls -l shutdown[/code] Lo hacemos ejecutable [code linenumbers=false]chmod +x shutdown[/code] Y lo volvemos a ver [code linenumbers=false]ls -l shutdown[/code] ¿Veis el cambio en la parte de los flags de la izquierda?, tiene que ser algo así: [code linenumbers=false]-rwxr-xr-x 1 root root 139 Feb 16 16:04 shutdown[/code] 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: [code linenumbers=false]date Thu Feb 17 10:28:01 CST 2011[/code] 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: [code linenumbers=false]crontab -l[/code] Y para añadir y/o modificar algo en el cron se usa el comando: [code linenumbers=false]crontab -e[/code] ¿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: [code linenumbers=false]0 2 * * * /usr/local/etc/shutdown[/code] 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 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 [code linenumbers=false]crontab -l[/code] Ahora vamos a explicar lo que significa cada campo del cron, para que lo podais modificar a vuestro gusto. En esta página: [spoiler]http://www.pantz.org/software/cron/croninfo.html[/spoiler] podreis ver una explicación mas exhaustiva, yo os voy a comentar cada campo rápidamente: [code linenumbers=false]# 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[/code] [b]0[/b]: Nuestro primer campo es el minuto de ejecución: 0 en este caso [b]2[/b]: 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 [b]/usr/local/etc/shutdown[/b]: 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... [b][color=red]ADVERTENCIA[/color][/b]! 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. [code linenumbers=false]stopall[/code] 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: [code linenumbers=false]./rcS[/code] 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. [code linenumbers=false]SI EL EQUIPO NO ARRANCA: Páralo de nuevo tecleando: stopall y teclealo rápido entre los mensajes que aparecen, no te preocupes si lo tecleas entre ellos, algo así como: sto mensaje pal mensaje l[/code] Ahora vamos a intentar recuperar el fichero original con [code linenumbers=false]cp rcS.orig rcS[/code] y lo volvemos a probar con [code linenumbers=false]./rcS[/code] 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: [code linenumbers=false]more /usr/local/etc/shutdown.log[/code] 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