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

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

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

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

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

그냥 사용하지 마세요 nohup.

nohup특별한 작업을 수행하지 않고 신호를 무시하고 stdout 및 stderr을 파일로 리디렉션하며 - GNU coreutils SIGHUP와 같은 일부 변형에서만 표준 입력을 열린 곳에서 리디렉션합니다.nohup/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.shsleep 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..."

관련 정보