¿Cómo podemos reanudar el script desde donde lo dejó después de reanudarlo en Linux Ubuntu? ¿De todos modos podemos hacer uso de rc.local?

¿Cómo podemos reanudar el script desde donde lo dejó después de reanudarlo en Linux Ubuntu? ¿De todos modos podemos hacer uso de rc.local?

¿Cómo se puede utilizar rc.local para reanudar el script después de reanudarlo?

Alguna explicación del comentario del usuario:

Boot_desired_kernel() {} 
# after this system will reboot 
Do_task(){} 
Do_task() /*

Pegar el archivo en init.d y actualizarlo funciona para que el script se ejecute después del reinicio, pero lo que espero es que el script comience donde lo dejó antes del reinicio.

Respuesta1

No sé cómo hacerlo usando rc.local, pero tal vez quedes satisfecho con systemdla forma:

  • Cree el nuevo servicio systemd:

    sudo vim.tiny /etc/systemd/system/startscript.service
    

    nanoEn lugar de vim.tinyotro editor que te guste, puedes
    pegar el siguiente:

    [Unit]
    Description=Start script after resume
    After=suspend.target
    
    [Service]
    Type=simple
    ExecStart=/full/path/to/the/script.sh
    
    [Install]
    WantedBy=suspend.target
    
  • Habilite e inicie el servicio:

    sudo systemctl enable startscript && sudo systemctl start startscript
    

Respuesta2

No sé cómo reanudar la ejecución del script después del reinicio, pero puede verificar la versión del kernel y, si la versión del kernel es la que necesita, puede ejecutar el resto del script omitiendo la parte de cambio y reinicio del kernel como en el siguiente script. Pero el script se ejecutará antes del primer reinicio y después de cada reinicio.

#!/bin/bash

kernel="5.3.0-40-generic"

if [[ $(uname -a) != *$kernel* ]]; then
    kernlist="$(grep -i "menuentry '" /boot/grub/grub.cfg|sed -r "s|--class .*$||g")"
    printf "%s$kernlist\n" | logger
    menuline="$(printf "%s$kernlist\n"|grep -ne $kernel | grep -v recovery | cut -f1 -d":")"
    menunum="$(($menuline-2))"
    grub-reboot "1>$menunum"
    echo "The next grub's menu entry will be choosen after the reboot:\n 1>$menunum" | logger
    reboot
fi

if [[ $(uname -a) == *$kernel* ]];
  then echo "This command is executed after reboot to $kernel" | logger;
fi

echo "Currently running kernel version is: $(uname -r)" | logger

Después de reiniciar, omite la parte de selección del kernel en ejecución si el kernel actual es de la versión requerida y repite "Este comando se ejecuta después de reiniciar en KERNEL_VERSION_HERE" si ejecuta journalctl -b | grep Thiso:

$ journalctl -b | grep Currently
Apr 13 17:35:51 lenovo root[1013]: Currently running kernel version is: 5.3.0-40-generic

Después de agregar esto, systemdse carga con el kernel predeterminado y luego se reinicia automáticamente y arranca con el kernel genérico 5.3.0-40.

$ cat /etc/systemd/system/resscript.service 
[Unit]
Description=Start script after reboot
After=network.target

[Service]
Type=simple
ExecStart=/home/user/test/resscript.sh

[Install]
WantedBy=multi-user.target

información relacionada