!["at" 명령을 사용하여 제출된 일괄 작업의 런타임 로그를 확인하는 방법은 무엇입니까?](https://linux55.com/image/191678/%22at%22%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%A0%9C%EC%B6%9C%EB%90%9C%20%EC%9D%BC%EA%B4%84%20%EC%9E%91%EC%97%85%EC%9D%98%20%EB%9F%B0%ED%83%80%EC%9E%84%20%EB%A1%9C%EA%B7%B8%EB%A5%BC%20%ED%99%95%EC%9D%B8%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
Ubuntu 20에서 일괄 작업을 제출하고 있습니다.
at now -f myscript.sh
작업이 완료되면 로그가 포함된 이메일을 받습니다. 하지만 시간이 많이 걸리는 작업의 경우 실행 진행 상황을 확인하고 싶습니다. 어떻게 해야 하나요?
답변1
이는 매우 장황하지만 myscript.sh의 첫 번째 행에 있는 쉘에 -x를 추가하면 스크립트의 행별 실행이 표시됩니다. 출력은 작업을 제출한 사용자에게 이메일로 전송되고 cron 로그에도 나타납니다.
예를 들어 #!/bin/sh 대신 #!/bin/sh -x를 사용합니다.
작업이 진행되는 동안 tail -f cron log를 실행하여 진행 상황을 확인하세요. 참고로 이렇게 하면 많은 로그 데이터가 생성됩니다! 어떤 방식으로든 진행 상황을 표시하기 위해 스크립트를 수정하도록 선택할 수 있습니까? echo "분해가 완료되었습니다. xxx 설치를 시작하세요."
답변2
이 at
도구는 프로세스의 표준 출력을 캡처한 다음 이를 로그로 보냅니다. 따라서 로그를 크게 변경하지 않고 at
기록되는 동안 로그를 읽는 것은 불가능합니다 .
하지만 두 번째 로그를 사용하여 이 문제를 해결할 수 있습니다. 알려진 이름의 파일에 "진행률" 로그를 인쇄하면 됩니다. 그 후에는 tail -f
원하는 대로 무시하거나 무시할 수 있습니다.
즉, 실행하는 스크립트는 다음 at
과 같습니다.
#!/bin/sh
echo Started at `date`
echo Started at `date` > /var/myscript.log
some_long_running_process_with_log >> /var/myscript.log
rc=$?
echo Completed at `date` with return code $rc
echo Completed at `date` with return code $rc >> /var/myscript.log
at
이 경우 메일로 전송된 내용에 대한 짧은 로그(단 두 줄)와 장기 실행 내부 부분의 모든 로그를 갖게 됩니다 .
이 방법의 확장으로 tee
표준 출력을 파일에 복사할 수 있는 . 그러면 스크립트에서 로그 메시지를 반복적으로 인쇄하는 데 도움이 될 수 있습니다.
#!/bin/sh
echo Started at `date` | tee /var/myscript.log
some_long_running_process_with_log >> /var/myscript.log
rc=$?
echo Completed at `date` with return code $rc | tee -a /var/myscript.log