백그라운드 작업 실행 시간 기록

백그라운드 작업 실행 시간 기록

백그라운드에서 실행하고 다음과 같은 명령으로 모든 출력을 캡처하는 스크립트가 있습니다.

nohup bash -x test.sh < /dev/null > log.txt 2>&1 &

완료하는 데 시간이 얼마나 걸렸는지 어떻게 알 수 있나요? 오류가 발생한 time후 사용하려고 하면 다음과 같습니다 .bash -x

/usr/bin/time: /usr/bin/time: cannot execute binary file

사용하려고 하면 acct프로세스가 기록되지 않거나 찾을 수 없는 것 같습니다.

답변1

[이것은 귀하의 질문에서 명확하지 않은 출력 time도 로 이동하기 를 원한다고 가정합니다.]log.txt

.nohup

nohup특별한 일은 하지 않지만 SIGHUP신호를 무시하고 stdout 및 stderr을 파일로 리디렉션하고 -- GNU coreutils와 같은 일부 변형에서만 -- 열린 곳 nohup에서 stdin을 리디렉션합니다./dev/null쓰기 전용방법.

이 모든 작업을 셸에서 쉽게 수행할 수 있습니다.

{ trap '' HUP; time bash -x your_script args ... ; } > log.txt 2>&1 0>/dev/null &

또는 스크립트에서 시작했거나 다음을 사용하여 명령을 포그라운드로 되돌릴 계획이 없는 경우 더 안전합니다 fg.

(trap '' HUP; time bash -x your_script args ... 0>/dev/null &) > log.txt 2>&1

0>/dev/null( GNU nohup의 해당 기능을 에뮬레이트하고 싶지 않다면 생략할 수 있습니다 ).


물론, 어떤 알 수 없는 이유로 nohup에 마법의 속성을 부여하는 경우 nohup과 함께 첫 번째 예의 구문 트릭을 사용할 수도 있습니다.

{ time nohup bash -x your_script args ... ; } > log.txt 2>&1 &

답변2

time과정 은 다음과 같습니다 nohup.

$ time nohup bash -x ~/scripts/foo.sh 
nohup: ignoring input and appending output to 'nohup.out'

real    0m10.011s
user    0m0.005s
sys 0m0.006s

foo.sh단순히 sleep 10예를 들었습니다.

답변3

다음을 사용할 수 있습니다.

time yourscript.sh

하지만 그래도 문제가 해결되지 않으면 다음과 같이 스크립트 내용을 래핑할 수 있습니다.

STARTTIME=$(date +%s)
#command block that takes time to complete...
ENDTIME=$(date +%s)
echo "It takes $($ENDTIME - $STARTTIME) seconds to complete this task..."

관련 정보