¿Cómo puedo ejecutar el script bash en segundo plano?

Oct 24 2020

Estoy aprendiendo a escribir scripts bash y acabo de hacer un proyecto corto para notificarme (con notificación-envío) cuando mi batería está baja o cargada.

Me gustaría recibir algunas sugerencias de cómo puedo ejecutar este script sin mostrar la terminal. Mi idea es agregarlo en el software "Aplicaciones de inicio" para que se ejecute cuando arranque el sistema, pero no quiero mostrar el terminal, solo para ejecutarlo en segundo plano.

Respuestas

1 kanehekili Oct 24 2020 at 20:57

Puede configurar un servicio systemd.

Puede crear un archivo (como sudo) con su editor favorito (nano, vim, etc.) como:

sudo nano /etc/systemd/system/myexecuteable.service

Debe contener al menos lo siguiente:

[Unit]
Description=start my executable after multi-user target

[Service]
Type=simple
ExecStart=/path/to/my/executable

[Install]
WantedBy=multi-user.target

Para asegurarse de que el servicio se inicie después de reiniciar, ejecute: sudo systemctl enable myexecutable.service

Ese servicio se ejecutará continuamente si bash tiene algún tipo de bucle. Si ese ejecutable tiene alguna salida (use "logger para eso en un archivo bash) puede verificarlo en cualquier momento usandojournalctl -u myexecutable.service

1 Seamus Oct 24 2020 at 23:32

Se puede ejecutar un script en segundo plano desde la línea de comando como este:

$ ./myscript.sh &

En otras palabras, agregue &al comando.

Ha dicho que desea ejecutar este script "sin mostrar el término". Creo que hay dos formas de hacer esto:

  1. crear un systemdservicio, como en esta respuesta

  2. inicie el script como un crontrabajo cuando el sistema arranca:

Para configurar un crontrabajo, deberá crear una nueva crontabentrada.

Para hacer esto, abra una terminal y escriba el siguiente comando:

$ crontab -e

Esto lo abrirá crontaben un editor ( nanoes una buena opción para el editor). Cuando esté en el editor, agregue la siguiente línea al final del archivo:

@reboot /home/user/myscript.sh & >> /home/user/myscript.log 2>&1 

¿Dónde /home/user/myscript.shestá la ruta completa a su archivo de script? Cualquier salida de su secuencia de comandos se redirigirá al archivo en /home/user/myscript.log. Asegúrese de revisar este archivo de registro para ver si hay mensajes de error.

Guarde el archivo ( ^ o) si lo usa nanoy salga del editor ( ^ x).

Algunas cosas para recordar:

  1. Asegúrese de que myscript.shsea ejecutable .

  2. Si usa algún comando en myscript.sh, asegúrese de que el sistema sepa dónde encontrarlo, es decir, use una ruta completa al comando o declare un PATH en su script.

Háganos saber si tiene más preguntas (publique un comentario) e intentaremos ayudarlo.