
Como o rc.local pode ser usado para retomar o script após a retomada?
Alguma explicação do comentário do usuário:
Boot_desired_kernel() {}
# after this system will reboot
Do_task(){}
Do_task() /*
Usar colar o arquivo em init.d e atualizá-lo está funcionando para que o script seja executado após a reinicialização, mas o que espero é que o script comece de onde parou antes da reinicialização
Responder1
Não sei como fazer isso usando rc.local
, mas talvez você fique satisfeito com systemd
a forma:
Crie o novo serviço systemd:
sudo vim.tiny /etc/systemd/system/startscript.service
Você poderia
nano
, em vez devim.tiny
outro editor de sua preferência,
colar o próximo a ele:[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 o serviço:
sudo systemctl enable startscript && sudo systemctl start startscript
Responder2
Não sei como retomar a execução do script após a reinicialização, mas você pode verificar a versão do kernel e se a versão do kernel for o que você precisa, você pode executar o restante do script ignorando a parte de alteração e reinicialização do kernel como no próximo script. Mas o script será executado antes da primeira reinicialização e após cada reinicialização.
#!/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
Após a reinicialização, ele ignora a parte de seleção do kernel em execução se o kernel atual for da versão necessária e ecoa "Este comando é executado após a reinicialização para KERNEL_VERSION_HERE" se você executar journalctl -b | grep This
ou:
$ journalctl -b | grep Currently
Apr 13 17:35:51 lenovo root[1013]: Currently running kernel version is: 5.3.0-40-generic
Depois de adicionar isso, systemd
ele carrega com o kernel padrão e, em seguida, reinicia e inicializa automaticamente com o kernel 5.3.0-40 genérico.
$ 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