복잡한 종료 및 복구 프로세스를 수행하는 스크립트가 있습니다. 일부 장기 실행 명령을 실행합니다. 일부는 약 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
실패 하면 mycommand
make는 두 번째 명령을 실행하지 않으므로 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
.