¿Necesita iniciar un programa de Linux en el arranque? El software systemd proporciona una forma de hacerlo en cualquier distribución de Linux con systemd, que es la mayoría de ellos en estos días, incluido Ubuntu. Lo guiaremos a través del proceso de creación de un servicio integrado, e incluso habla con la revista.
Este tutorial demuestra cómo configurar un servicio del sistema que se inicia cuando inicia su sistema. Para iniciar un programa gráfico al iniciar sesión, utilice el administrador de inicio de su escritorio .
A veces, el software que instala en su computadora se engancha al proceso de inicio de Linux, de modo que el programa se inicia automáticamente cada vez que se inicia la computadora. Puede lograr fácilmente este mismo comportamiento con sus propios programas y scripts, o de hecho con cualquier otro programa que esté en su computadora.
Los programas que se inician al inicio son controlados por systemd
el administrador del sistema y del servicio . systemd
es el primer proceso que se ejecuta al inicio. Siempre tiene ID de proceso (PID) 1. Todos los demás procesos que se ejecutan en su computadora son iniciados por systemd
, o por un proceso que systemd
ya ha comenzado.
Los programas que se ejecutan en segundo plano se denominan daemons o servicios. La «d» al final de systemd
significa daemon. En este artículo, crearemos un servicio de ejemplo. Para marcar todas las casillas, nuestro servicio debe ser:
systemd
través de un archivo de unidad de serviciosystemctl
, la interfaz de control parasystemd
Necesitamos tener un programa que systemd
se lance. Crearemos un script simple, llamado «htg.sh». Este tutorial usa el editor de texto Gedit, pero puede usar el editor de texto que prefiera.
toque htg.sh
gedit htg.sh
Se gedit
abrirá el editor. Copie y pegue el siguiente texto en el editor.
#! / bin / bash echo "htg.service: ## Iniciando ##" | systemd-cat -p info mientras : hacer TIMESTAMP = $ (fecha '+% Y-% m-% d% H:% M:% S') echo "htg.service: marca de tiempo $ {TIMESTAMP}" | systemd-cat -p info dormir 60 hecho
Guarde sus cambios y cierre el editor.
El guión no hace mucho, pero hay algunos puntos que vale la pena señalar.
echo
líneas se canalizan a través de systemd-cat
un programa que toma la salida de un programa y la envía al diario . Se da prioridad a las entradas a la revista. Estamos usando la -p
opción (prioridad) para indicar que nuestros mensajes son solo para información (info). No son errores ni advertencias importantes.while
bucle sin fin .TIMESTAMP
variable se establece en la fecha y hora actuales. Esto se formatea en un mensaje y se envía a la revista.Copiaremos el script al /usr/local/bin
directorio.
sudo cp htg.sh / usr / local / bin
Y necesitamos hacerlo ejecutable:
sudo chmod + x /usr/local/bin/htg.sh
Cada programa que se inicia systemd
tiene un archivo de definición, llamado archivo de unidad de servicio. Contiene ciertos atributos que se systemd
pueden usar para ubicar e iniciar el programa, y para definir parte de su comportamiento.
Necesitamos crear un archivo de unidad para nuestro nuevo servicio, pero es prudente asegurarse de que ninguno de los archivos de unidad existentes tenga el nombre que queremos darle a nuestro nuevo servicio.
sudo systemctl list-unit-files --type-service
Puede desplazarse por la lista de archivos de unidad, que está ordenada alfabéticamente, y comprobar que no se utiliza el nombre que desea utilizar.
Nuestro servicio se llamará «htg.service». Ningún archivo de unidad tiene ese nombre, por lo que podemos continuar y crear nuestro archivo de unidad.
sudo gedit /etc/systemd/system/htg.service
Se gedit
abrirá el editor. Copie y pegue el siguiente texto en el editor:
[Unidad] Descripción = Ejemplo de servicio técnico de Geek Quiere = network.target Después = syslog.target network-online.target [Servicio] Tipo = simple ExecStart = / usr / local / bin / htg.sh Reiniciar = en caso de falla RestartSec = 10 KillMode = proceso [Instalar en pc] WantedBy = multi-user.target
Guarde sus cambios y cierre el editor.
Las entradas tienen estos significados. Estas son entradas típicas. Nuestro sencillo servicio en realidad no necesita la mayoría de ellos, pero incluirlos nos permite explicarlos.
systemd
considerará que este servicio se inició tan pronto como ExecStart
se haya bifurcado el proceso especificado por .systemd
debe matar el proceso si pedimos systemctl
detener el servicio. Tenemos esto configurado para «procesar». Esto hace systemd
que se utilice la SIGTERM
señal solo en el proceso principal. Si nuestro servicio fuera un programa no trivial en lugar de un script simple, lo configuraríamos como «mixto» para asegurarnos de que todos los procesos generados también terminaron.El archivo de la unidad no necesita ser ejecutable, pero los permisos en el archivo de la unidad deberían restringir quién puede editarlo. No desea que un usuario malintencionado o malicioso cambie el archivo de la unidad para que ejecute un programa completamente diferente.
Este comando le dará al propietario permisos de lectura y escritura, y permisos de lectura al grupo. Otros no tendrán permisos.
sudo chmod 640 /etc/systemd/system/htg.service
Podemos systemctl
comprobar la sintaxis de nuestro archivo de unidad por nosotros, incluso si el servicio aún no se está ejecutando. Se informará de cualquier error. (En realidad, la parte «.service» es opcional para la mayoría de los comandos).
systemctl status htg.service
No se resaltan los errores, lo que significa que nuestro archivo de unidad es sintácticamente correcto.
Cuando agrega un nuevo archivo de unidad o edita uno existente, debe indicarle systemd
que vuelva a cargar las definiciones del archivo de unidad.
sudo systemctl daemon-reload
Si desea que un servicio se lance al inicio, debe habilitarlo :
sudo systemctl enable htg
Habilitar un servicio no lo inicia, solo lo configura para que se inicie en el momento del arranque. Para iniciar el servicio ahora , debe utilizar systemctl
con la start
opción.
sudo systemctl start htg
Después de iniciar manualmente el servicio o después de reiniciar la computadora, podemos verificar que nuestro servicio esté funcionando correctamente.
sudo systemctl status htg.service
Se nos muestra el estado del servicio.
sleep
comando, que ha sido lanzado por «htg.sh». La mayoría de las veces, el sleep
comando hará el trabajo para este servicio.También se muestran las últimas 10 entradas de diario producidas por este servicio. Como era de esperar, todos están separados por un minuto.
Si necesita detener el servicio, puede hacerlo con este comando:
sudo systemctl stop htg.service
Esto detiene el servicio, pero no evita que se reinicie la próxima vez que se reinicie la computadora. Para detener el inicio del servicio en el inicio, debe deshabilitarlo :
sudo systemctl deshabilitar htg.service
Si el servicio se está ejecutando, este comando no lo detiene. Simplemente le dice que systemd
no inicie el servicio en el próximo reinicio.
Si desea detener el servicio y evitar que se inicie durante el inicio, utilice ambos comandos.
Asegúrese de que su programa se ejecute como se esperaba antes de intentar ejecutarlo como servicio.
El mundo del gaming ha experimentado un crecimiento exponencial en los últimos años. La…
Stokkete/Shutterstock.com ¿Sigue utilizando una unidad flash USB obsoleta para almacenar sus archivos? ¿Por qué no…
LG Los fabricantes siempre intentan mejorar el rendimiento de imagen de los monitores. Como resultado,…
Patty Chan/Shutterstock.com Si cree en lo que ve en las redes sociales, puede pensar en…
Seksan.TH/Shutterstock.com Los servicios de suscripción como Netflix, Game Pass y Spotify nos permiten consumir tantas…
fatmawati achmad zaenuri/Shutterstock El acceso a Internet, oa cualquier otra red, se rige por la…