![¿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?](https://rvso.com/image/922436/%C2%BFC%C3%B3mo%20podemos%20reanudar%20el%20script%20desde%20donde%20lo%20dej%C3%B3%20despu%C3%A9s%20de%20reanudarlo%20en%20Linux%20Ubuntu%3F%20%C2%BFDe%20todos%20modos%20podemos%20hacer%20uso%20de%20rc.local%3F.png)
¿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 systemd
la forma:
Cree el nuevo servicio systemd:
sudo vim.tiny /etc/systemd/system/startscript.service
nano
En lugar devim.tiny
otro 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 This
o:
$ 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, systemd
se 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