GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo escribir un script de inicio para Systemd?

Tengo 2 tarjetas gráficas en mi portátil. Uno es IGP y otro discreto.

Escribí un script de shell para apagar la tarjeta gráfica discreta.

¿Cómo puedo convertirlo a script systemd para ejecutarlo al inicio?

Respuesta aceptada:

Existen principalmente dos enfoques para hacerlo:

  • Si tiene que ejecutar un script, no lo convierta, sino que ejecute el script a través de un systemd servicio.

Por lo tanto, necesita dos archivos:el script y el .service (archivo de configuración de la unidad).
Asegúrese de que su secuencia de comandos sea ejecutable y que la primera línea (el shebang ) es #!/bin/sh . Luego crea el .service archivo en /etc/systemd/system (un archivo de texto sin formato, llamémoslo vgaoff.service ).
Por ejemplo:

  1. el guión:/usr/bin/vgaoff
  2. el archivo de la unidad:/etc/systemd/system/vgaoff.service

Ahora, edite el archivo de la unidad. Su contenido depende de cómo funcione tu script:

Si vgaoff simplemente apaga la gpu, por ejemplo:

exec blah-blah pwrOFF etc 

luego el contenido de vgaoff.service debería ser:

[Unit]
Description=Power-off gpu

[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff

[Install]
WantedBy=multi-user.target

Si vgaoff se utiliza para apagar la GPU y también para volver a encenderla, por ejemplo:

start() {
  exec blah-blah pwrOFF etc
}

stop() {
  exec blah-blah pwrON etc
}

case $1 in
  start|stop) "$1" ;;
esac

luego el contenido de vgaoff.service debería ser:

[Unit]
Description=Power-off gpu

[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff start
ExecStop=/usr/bin/vgaoff stop
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
  • Para los casos más triviales, puede prescindir del script y ejecutar un determinado comando directamente:

Para apagar:

[Unit]
Description=Power-off gpu

[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"

[Install]
WantedBy=multi-user.target

Para apagar y encender:

[Unit]
Description=Power-off gpu

[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"
ExecStop=/bin/sh -c "echo ON > /whatever/vga_pwr_gadget/switch"
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Una vez que haya terminado con los archivos, habilite el servicio:

systemctl enable vgaoff.service

Se iniciará automáticamente en el próximo arranque. Incluso podría habilitar e iniciar el servicio de una vez con

systemctl enable --now vgaoff.service

a partir de systemd v.220 (en configuraciones más antiguas tendrá que iniciarlo manualmente).
Para obtener más detalles, consulte systemd.service página de manual.

Resolución de problemas .
Comience aquí:
Cómo ver el registro completo de un systemd servicio?
systemd códigos de salida del servicio y explicación de la información de estado


Linux
  1. Linux – ¿Ubicación del script Fsck?

  2. ¿Cómo cambiar de usuario para un montón de archivos de servicio de Systemd?

  3. ¿Cómo configurar Systemd para convertir un script simple con Standardio en un servicio de red?

  4. ¿Cómo empaquetar un servicio Systemd?

  5. Cómo establecer valores ulimit para un servicio systemd

Cómo escribir un script Bash con ejemplos

Cómo ejecutar Shell Script como servicio Systemd en Linux

Cómo escribir un script de Shell en Ubuntu

Cómo configurar la ejecución automática de un script de Python usando Systemd

Cómo ejecutar Shell Script como servicio SystemD en Linux

¿Cómo enviar un correo electrónico si se reinicia un servicio systemd?