Linux Ubuntu에서 재개 후 중단된 위치부터 스크립트를 어떻게 재개할 수 있습니까? 어쨌든 rc.local을 사용할 수 있나요?

Linux Ubuntu에서 재개 후 중단된 위치부터 스크립트를 어떻게 재개할 수 있습니까? 어쨌든 rc.local을 사용할 수 있나요?

재개 후 스크립트를 재개하기 위해 rc.local을 어떻게 사용할 수 있습니까?

사용자 의견의 일부 설명:

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

init.d에 파일을 붙여넣고 업데이트하면 재부팅 후 스크립트가 실행되도록 작동하지만 예상되는 것은 스크립트가 재부팅 전에 중단된 부분부터 시작되어야 한다는 것입니다.

답변1

를 사용하여 어떻게 수행하는지 모르겠지만 rc.local아마도 다음 방법에 만족할 것입니다 systemd.

  • 새로운 시스템 서비스를 생성합니다:

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

    좋아하는 다른 편집기 nano대신 옆에 붙여넣을 수 있습니다 .vim.tiny

    [Unit]
    Description=Start script after resume
    After=suspend.target
    
    [Service]
    Type=simple
    ExecStart=/full/path/to/the/script.sh
    
    [Install]
    WantedBy=suspend.target
    
  • 서비스를 활성화하고 시작합니다.

    sudo systemctl enable startscript && sudo systemctl start startscript
    

답변2

재부팅 후 스크립트 실행을 재개하는 방법은 모르겠지만 커널 버전을 확인하고 커널 버전이 필요한 경우 다음 스크립트와 같이 커널 변경 및 재부팅 부분을 건너 뛰고 나머지 스크립트를 실행할 수 있습니다. 그러나 스크립트는 처음 재부팅하기 전과 재부팅할 때마다 실행됩니다.

#!/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

재부팅 후 현재 커널이 필수 버전인 경우 커널 선택 부분 실행을 건너뛰고 다음을 실행하면 "이 명령은 KERNEL_VERSION_HERE로 재부팅한 후 실행됩니다"를 에코합니다 journalctl -b | grep This.

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

이를 추가하면 systemd기본 커널로 로드된 다음 자동으로 재부팅되고 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

관련 정보