
Actualmente estoy intentando reducir el tiempo que lleva arrancar mi beaglebone green e iniciar un script en Python. Mi sencillo script en Python simplemente activa un relé en una capa.
Estoy usando el tiempo que tarda el relé en girar como el tiempo que tarda en arrancar y hacer algo útil.
Anteriormente, el relevo tomaba 18 segundos y lo reduje a 14 segundos jugando con systemd.
He creado un archivo unitario simple que iniciará mi programa Python.
[Unit]
Description=Relaycheck run on startup
DefaultDependencies=no
After=systemd-system.slice
[Service]
WorkingDirectory=/home/
ExecStart=/home/relaycheck2.py
StandardOutput=null
[Install]
Alias=relaycheck2.service
Y aquí hay una imagen recortada del gráfico de arranque actual: Gráfico de arranque
Según tengo entendido, mi servicio se está ejecutando bastante temprano y los servicios que consumen mucho tiempo, como la creación de redes, no afectan mi servicio de retransmisión. ¿Es esto correcto?
¿Hay algo más que pueda hacer para reducir el tiempo de arranque usando systemd?
Respuesta1
¿Su programa necesita mantener el estado (¿necesita un disco grabable?). Lo más rápido que probablemente pueda hacer es no usar un sistema de inicio en absoluto. En su lugar, considere agregar esto a los argumentos de su Kernel (muy probablemente en su entorno/configuración de uBoot):
init=/path/to/your/program
Entonces, en lugar de ejecutar systemd
(el administrador de procesos), el kernel de Linux ejecutará su programa como primer proceso. Ahora dijiste que esto era un script de Python. Nopensarpuedes ejecutar un script como init. Es posible que necesite escribir un pequeño programa contenedor en un lenguaje compilado que genere su aplicación Python.
Tenga en cuenta que su programa shell/wrapper también necesita manejar señales (init/systemd maneja señales para programas que no tienen controladores de señales predeterminados). Es posible que puedas salirte con la tuya usando algo comoinicio tontoque se utiliza normalmente para contenedores Docker.
Si necesita un volumen grabable, puede hacer que su programa contenedor también monte una partición (no tiene que ser su partición raíz. Es posible que desee montar una memoria USB para almacenamiento).
Primero probaría esto en una máquina virtual de escritorio, ya que los parámetros del kernel pueden ser un poco complicados en sistemas integrados/uBoot.