체크포인트를 사용하여 명령 목록을 실행하시겠습니까?

체크포인트를 사용하여 명령 목록을 실행하시겠습니까?

복잡한 종료 및 복구 프로세스를 수행하는 스크립트가 있습니다. 일부 장기 실행 명령을 실행합니다. 일부는 약 10분 정도 소요되고 다른 일부는 더 빨리 소요됩니다.

이러한 모든 명령을 파일에 저장하고 체크포인트를 통해 실행할 수 있는 소프트웨어가 있습니까? 예를 들어, 하나씩 실행하고 어느 것이 마지막에 실행되었는지 기억하거나, 모두 실행하고 그중 하나가 중단되면 그 시점부터 다시 시도할 수 있습니다.

답변1

각 장기 실행 명령을 실행한 후에는 해당 명령이 실행되었음을 기억해야 합니다. 무슨 일이 일어났는지 기억하는 방법은 정보를 파일에 저장하는 것입니다.

이러한 명령 중 하나가 파일을 생성하면 파일이 존재하는지 테스트할 수 있습니다. 참고할 몇 가지 사항이 있습니다.

  • 명령이 출력 파일을 생성하고 여러 단계에 걸쳐 채우고 중간에 실패하면 결국 부분 파일이 생성됩니다. 해결 방법은 명령이 임시 파일에 쓰도록 하고 명령이 성공적으로 완료된 후 임시 파일의 이름을 최종 이름으로 바꾸는 것입니다.
  • 명령이 실행되기 전에 출력 파일이 이미 존재하는 경우 출력 파일이 최신인지 확인하는 방법이 필요합니다. 이 문제는 일반적으로 입력 파일과 출력 파일의 수정 시간을 비교하여 해결할 수 있습니다. 출력 파일이 입력 파일보다 최신이면 재생성되었음을 나타냅니다.

이게 다 기본적인 작업이에요자동화 도구 구축. 전통적인 도구를 사용할 수 있습니다.만들다. 이는 "파일 B가 파일 A에서 빌드되고 A가 B보다 최신이거나 B가 존재하지 않는 경우 A에서 B를 생성하는 명령을 실행합니다"라는 개념을 바탕으로 구축되었습니다. 구문은 다음과 같습니다.

B: A
        command-to-generate-B-from-A

두 번째 줄은 공백이 아닌 탭 문자로 시작됩니다.

명령이 출력 파일을 자동으로 생성하지 않으면 이를 임시 파일에 씁니다.

B: A
        mycommand <A >B.tmp
        mv B.tmp B

실패 하면 mycommandmake는 두 번째 명령을 실행하지 않으므로 B명령을 생성하지 않습니다.

B를 생성하려면 명령을 실행합니다 make B. B가 이미 존재하고 A보다 최신이면 make는 mycommand다시 실행되지 않습니다.

체인 규칙을 자동으로 공식화합니다. A에서 B를 빌드하는 규칙과 B에서 C를 빌드하는 규칙이 있고 A만 존재하는 경우 make C자동으로 B를 빌드한 다음 C를 빌드합니다.

명령이 실행되었음을 표시하는 파일이 없으면 기억할 빈 파일을 만들 수 있습니다.

command1.timestamp:
        command1
        touch command1.timestamp
command2.timestamp:
        command2
        touch command2.timestamp

이미 존재하는 경우 실행해도 make command2.timestamp아무 작업도 수행되지 않습니다. command2.timestamp그렇지 않으면 먼저 실행된 다음 command1( command1.timestamp이미 존재하지 않는 한) 실행됩니다 command2.

관련 정보