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