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