Raspberry Pi es un potente SBC (computadora de placa única) que puede utilizar para diversas aplicaciones y proyectos. Su versatilidad radica en su capacidad para ejecutar todo tipo de programas, incluidos scripts personalizados, gracias en parte al sistema operativo Raspberry Pi y otros sistemas operativos basados ​​en Linux que ejecuta.

Ejecutar un script o programa en la Raspberry Pi es tan simple como encontrarlo en el sistema y ejecutarlo. Pero, ¿qué sucede si desea automatizar este proceso, tal vez porque su proyecto lo requiere o porque desea optimizar su flujo de trabajo?

Una respuesta a esto es aprender a usar systemd.

¿Qué es Systemd?

systemd es un conjunto de componentes del sistema para la configuración y el comportamiento del servicio en los sistemas Linux modernos. Se identifica con un PID (identificador de proceso) de 1 ya que es el primer proceso que se inicia al iniciar el sistema. En general, el propósito de systemd es ayudarlo a administrar y ejecutar programas al iniciar el sistema. Y eso es lo que aprovecharás para lanzar tu programa al inicio de la Pi.

instagram viewer

Como se mencionó inicialmente, existen varios métodos para ejecutar programas al inicio en sistemas Linux, como rc.local, cron y autostart. Sin embargo, systemd pasa a ser una mejor solución del lote si desea iniciar programas GUI (interfaz gráfica de usuario), Automatizar aplicaciones para que se ejecuten después de que comiencen ciertos procesos del sistema, o ejecutar programas una y otra vez hasta su programación. obras.

Relacionados: Cómo programar tareas en Linux con Cron y Crontab

Cómo utilizar systemd para iniciar programas al iniciar

systemd es un método un poco más complicado de ejecutar programas al inicio en sistemas Linux. Sin embargo, la flexibilidad de programación que ofrece sobre otros métodos, los que hemos mencionado anteriormente, supera por completo su complejidad en todos los aspectos.

El método systemd usa archivos de unidad, que son como archivos .ini que contienen información de codificación sobre dispositivos, servicios, sockets, destino de inicio y otros componentes esenciales del sistema.

Los archivos unitarios son de varios tipos. Entonces, según el tipo de recurso que desee declarar, debe elegir un tipo de archivo de unidad en consecuencia. Sin embargo, para el propósito de esta guía, nos ceñiremos a los archivos de unidad .service, que le permiten administrar el comportamiento de inicio de programas y scripts en el sistema.

A continuación se muestra un desglose de los pasos involucrados en el lanzamiento de un script / programa al inicio usando systemd.

Crear un servicio

Para configurar su programa para que se ejecute al inicio, cree un archivo de unidad de servicio que le dirá a systemd qué programa ejecutar y cuándo. He aquí cómo hacerlo.

  1. En la ventana CLI, escriba sudo nano /lib/systemd/system/display.service. Puede usar cualquier nombre para su servicio siempre que termine con la extensión .service.
  2. En el archivo de servicio, pegue las siguientes líneas de código:
    [Unidad]
    Descripción = PiCounter
    Después = network.target
    [Servicio]
    ExecStart = / usr / bin / python3 /home/pi/PiCounter/display.py
    Reiniciar = siempre
    Usuario = pi
    [Instalar en pc]
    WantedBy = multi-user.target

Todas sus opciones de configuración comunes se encuentran bajo el Unidad y Instalar en pc secciones, mientras que las opciones de configuración específicas del servicio se encuentran en la sección Servicio.

Algunos de los pares de directiva-valor anteriores que podría necesitar modificar incluyen:

I. Después: Determina cuándo iniciar el servicio. Poniéndolo en network.target asegura que el valor listado - network.target en este caso - comience antes de comenzar la unidad actual. Sin embargo, no dirige una relación de dependencia para que se active el servicio; eso se hace a través de otras directivas como Wants, Require y WantedBy.

Por supuesto, puede cambiar este valor para adaptarlo a los requisitos de su proyecto. Por ejemplo, si desea que su programa se ejecute después de que su Raspberry Pi se conecte a una red, puede usar el network-online.target valor. Puede referirse a Documentación de Fedora en systemd para aprender más sobre estos valores.

ii. ExecStart: Contiene la ruta absoluta y el nombre del programa / script que desea ejecutar al inicio. Entonces, dependiendo de lo que desee ejecutar, debe agregar valores para ambas directivas.

iii. Usuario: Identifica el nombre de tu Raspberry Pi. Si ha cambiado el nombre de su Pi, debe poner ese valor para el usuario.

iv. Buscado por: Es la forma más común de especificar el disparador de una unidad. Al configurarlo en multi-user.target, puede establecer una relación de dependencia que ejecutará el programa cuando el control del sistema se entregue al shell multiusuario.

Además, esto también ejecuta su programa antes de que se inicie el sistema X-Windows de Pi, lo que significa que su programa se ejecuta incluso antes de iniciar sesión en el sistema. En caso de que desee que se ejecute un script antes de iniciar sesión en su Raspberry Pi, esto le permite hacerlo.

Las líneas de código anteriores funcionan para programas que no son GUI. Sin embargo, si desea ejecutar un programa GUI usando systemd, debe agregar el siguiente código a su archivo de servicio:

[Unidad]
Descripción = PiCounter
Después = network.target
[Servicio]
Entorno = Pantalla =: 0
Entorno = XAUTHORITY / home / pi / .Xauthority
ExecStart = / usr / bin / python3 /home/pi/PiCounter/display.py
Reiniciar = siempre
[Instalar en pc]
WantedBy = multi-user.target

En el par directivo-valor anterior, todo lo que necesita cambiar es el valor de la ExecStart directiva. Reemplace el que está en el bloque de código con el programa que desea ejecutar al inicio. Una vez que haya llenado el archivo de servicio, presione CTRL + O para salvarlo.

Prueba el servicio

Con el servicio listo, verifique manualmente si funciona. Para ello, escriba el siguiente comando en la terminal: sudo systemctl start display.service. El servicio debería ejecutar sus instrucciones correctamente.

Una vez que lo haga, termínelo con sudo systemctl detener display.service.

Habilitar el servicio

Si logró ejecutar su programa con éxito utilizando el servicio, es hora de habilitarlo para que ejecute su programa automáticamente cada vez que inicie su Raspberry Pi.

Para hacer esto, escriba sudo systemctl enable display.service en la ventana de la terminal. Y una vez hecho esto, ingresa sudo reiniciar para reiniciar tu Pi.

Una vez que su Raspberry Pi se inicia, systemd debería ejecutar su programa según las instrucciones proporcionadas.

Automatización del lanzamiento del programa al inicio en Raspberry Pi

Como la mayoría de los sistemas Linux, Raspberry Pi OS también le permite realizar operaciones de varias maneras, y también se mantiene fiel a la programación de lanzamientos de programas. Por lo tanto, si desea iniciar programas / scripts de GUI al inicio y desea un mejor control sobre su programación, systemd es claramente un método mejor.

Dicho esto, sin embargo, si desea una solución más simple o los requisitos de su proyecto exigen una programación específica, puede consultar nuestra guía para Ejecución de un programa o script de Raspberry Pi al inicio aprender más.

Correo electrónico
La última hoja de trucos de comandos de Raspberry Pi

¿Quieres sacar más partido a tu Raspberry Pi? Aquí hay un montón de comandos útiles para navegar por la terminal de Pi y programar sus pines GPIO.

Leer siguiente

Temas relacionados
  • Bricolaje
  • Frambuesa pi
Sobre el Autor
Yash Wate (8 Artículos publicados)

Yash es redactor en MUO para bricolaje, Linux, programación y seguridad. Antes de encontrar su pasión por la escritura, solía desarrollar para la web y iOS. También puede encontrar sus escritos en TechPP, donde cubre otras verticales. Aparte de la tecnología, le gusta hablar de astronomía, Fórmula 1 y relojes.

Más de Yash Wate

Suscríbete a nuestro boletín

¡Únase a nuestro boletín de noticias para obtener consejos técnicos, reseñas, libros electrónicos gratuitos y ofertas exclusivas!

Un paso más…!

Confirme su dirección de correo electrónico en el correo electrónico que le enviamos.

.