
Cuando activamos una cam en OpenATV, podemos necesitar comprobar que se halla activa en los procesos del receptor, esto nos puede resultar util si por algun problema la cam se ha parado y deseamos reiniciarla automaticamente.
¿ Que entendemos con que el proceso de la cam se ha parado ?
Lo mas basico es entender que es que la cam se ha parado, simplemente cuando activamos una cam en el menu softcam de openatv, se inicia un proceso en el sistema que se identifica con un pid, por ejemplo si hemos activado oscam, podriamos ejecutar este comando para comprobar que realmente oscam esta activo:
pgrep oscam
En el caso de estar activo oscam la salida de ese comando nos mostrara los pid identificativos del proceso de oscam:
Si por algun error del sistema o de la cam, esta se ha parado, al ejecutar el comando anterior, no tendriamos ninguna salida, que nos indicaria que en este caso oscam se halla parado:
¿ Como podemos reiniciar una cam que hemos activado en el menu openatv por terminal ?
Cuando activamos cualquier cam desde el menu softcam de openatv, se nos crea un enlace simbolico llamado softcam en /etc/init.d que nos lleva al script de arranque de la emu activa.
Por ejemplo si hemos activado en el menu de openatv oscam-trunk por ejemplo:
En el directorio /etc/init.d se nos ha creado un enlace simbolico llamado softcam que nos lleva al script de arranque de la emu que hemos activado en el menu de openatv:
Que por ejemplo, si ejecutaramos el comando:
/etc/init.d/softcam restart
Nos reiniciaria la emu activa del menu openatv:
Ahora ya sabemos dos comandos que podemos utilizar para saber si la emu que hemos arrancado esta activa y otro para reiniciar la cam activa, que hemos querido hacer una pequeña preview para entender lo que vamos a realizar a continuacion mezclando estos comandos.
1. Comando comprobar cam activa y si no lo esta reinicio la cam
Como la ejecucion la vamos a realizar por crond posteriormente que nos permitira ejecutar esta accion cada xx tiempo, aunque se puede realizar la comprobacion y arranque de decenas de formas, o incluso usando script, pero no es necesario cuando lo podemos realizar en una sola linea de comando, para ello vamos a usar un popurri de los dos comandos explicados anteriormente y tendriamos:
if [[ `/usr/bin/pgrep xxxx` ]]; then echo hay xxxx; else /etc/init.d/softcam restart; fi
En ese codigo sustituiriamos las xxx por el nombre la cam que deseamos comprobar (oscam, ccccam, ncam etc….) y que evidentemente tenemos activa en el menu softcam de openatv.
Basicamente, no es necesario un script para esto, cuando como vemos en una sola linea de comando que luego usaremos en crond podemos realizar la comprobacion y reinicio de una manera eficiente y nos evitamos tener que estar metiendo script al deco para esto.
En este ejemplo, si lo que deseamos es comprobar oscam que tenemos activo en el menu softcam de openatv , el comando seria:
if [[ `/usr/bin/pgrep oscam` ]]; then echo hay oscam; else /etc/init.d/softcam restart; fi
Podemos comprobar su ejecucion antes de añadirlo a cron:
- Si oscam esta activa en procesos al ejecutar el comando, no hace nada solo mensaje de que hay oscam:
- Si oscam se ha parado accidentalmente, podemos pararlo nosotros para comprobarlo ejecutando:
pkill -9 oscam
Ahora al ejecutar el comando de comprobacion, como no encuentra el proceso oscam nos reiniciara oscam usando su script de arranque:
Ahora que ya sabemos como comprobar si nuestra emu esta activa y si no reiniciarla en un solo comando, ahora vamos a ver como ejecutarlo usando crond cada x tiempo.
2. Añadir a cron la ejecución del comando cada x tiempo
Ahora ya para finalizar vamos a ver como ejecutar el comando que hemos visto anteriormente cada x tiempo usando para ello crond que esta disponibles en los receptores enigma2 esta utilidad, en este ejemplo vamos a poner que se ejecute cada minuto, ya que si deseamos levantar oscam si se ha parado igual poner cada 6 horas no seria lo mas adecuado.
1. En primer lugar como seria obvio es comprobar que crond esta funcionando en el receptor, para ello lo buscamos en la lista procesos:
ps -A | grep cron
Bien perfecto crond esta funcionando.
2. Ahora tenemos que añadir nuestro comando a crond para que se ejecute cada minuto, para ello vamos a usar un comando de crontab, lo que ocurre que abre por terminal el editor de texto predeterminado que es vi en enigma2, como es mas visual nano en primer lugar vamos a poner como predeterminado nano en enigma2, para ello ejecutamos:
EDITOR=nano
export EDITOR
3. Ahora ejecutamos el siguiente comando para añadir nuestro comando a crond:
crontab -e
Se nos abrira el editor nano para editar el archivo crond, nos apareceran mas o menos lineas dependiendo si tenemos otros añadidos previamente:
4. Debajo de la ultima linea que tengamos introducimos nuestro comando que se va a ejecutar cada minuto:
* * * * * if [[ `/usr/bin/pgrep oscam` ]]; then echo hay oscam; else /etc/init.d/softcam restart; fi
Para guardar los cambios debemos pulsar ahora estas combinaciones de teclas del pc:
CONTROL + o
INTRO
CONTROL + x
Ya nos hemos salido del editor y guardado cambios.
5. Ahora podemos con el siguiente comando listar los procesos de crond para ver si realmente lo hemos añadido:
crontab -l
y observamos que todo correcto.
6. Para finalizar comprobamos que nos esta funcionando todo, para ello paramos oscam, en este ejemplo que como vimos era:
pkill -9 oscam
Esperamos a ver si nos reinicio la cam, en este ejemplo oscam.
3. Log proceso crond
Si deseamos ver el log de lo que estamos ejecutando con crond, y ver si lo esta realizando correctamente o hay algun error podemos ejecutar este comando por terminal:
grep CRON /var/log/messages
Observamos en la captura del log de crond como se ejecuta cada minuto, y que cuando paremos oscam nosotros, nos reinicio la cam (marcado en rojo en la captura)