es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ejecutar un script de shell al apagar la PC mientras la red aún está activa o configurar un retraso en la red para ejecutar el guion en Ubuntu.

Estoy intentando ejecutar un script para realizar un auto push de git cuando apagamos la computadora. Pero mi script y el archivo de servicio solo ejecutan el comando de commit y después de eso, la red se desconecta. Por lo tanto, no ejecuta el comando de push.

¿Cómo puedo completar la ejecución del script antes de que la red se desconecte?

Mi archivo de servicio:

[Unit]
Description=Realizará un commit y push automáticamente utilizando auto-commit-push-script
DefaultDependencies=no
Wants=network-online.target
After=network-online.target
Before=halt.target poweroff.target shutdown.target

[Service]
Type=oneshot

RemainAfterExit=true

ExecStart=/bin/true
ExecStop=/home/user/git-auto-commit/git_auto_commit.sh
TimeoutStopSec=60

[Install]
WantedBy=halt.target poweroff.target shutdown.target

Mi script:

#!/bin/bash

cd /home/user/Basics
usuario="xyz"
contraseña="xyz"
git add .
git commit -m "Auto-Commit al apagar la PC"
git push https://$usuario:$contraseña@github.com/username/Basics.git –all

¿Alguien puede ayudarme a resolver este problema?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para completar la ejecución del script antes de que la red se desconecte, puedes cambiar el comando ExecStop en el archivo de servicio para incluir un comando que espere a que la conexión de red se cierre antes de ejecutar el script. Aquí tienes un archivo de servicio actualizado que debería funcionar:

    [Unit]
    Description=Realizará la confirmación automática y el envío utilizando el script de confirmación y envío automático
    DefaultDependencies=no
    Wants=network-online.target
    After=network-online.target
    Before=halt.target poweroff.target shutdown.target
    
    [Service]
    Type=oneshot
    # RemainAfterExit=true
    ExecStart=/bin/true
    ExecStop=/bin/bash -c "while ping -c1 github.com >/dev/null 2>&1; do sleep 1; done && /home/user/git-auto-commit/git_auto_commit.sh"
    TimeoutStopSec=60
    
    [Install]
    WantedBy=halt.target poweroff.target shutdown.target
    

    El nuevo comando ExecStop utiliza un bucle para hacer ping continuamente a github.com hasta que la conexión de red ya no esté disponible. Una vez que el ping falla, el bucle sale y se ejecuta el script. Esto asegura que el comando de envío se ejecute antes de que la red se desconecte.

Comments are closed.