스크립트가 시작되고 중지 된시기를 알기 위해 크론 작업의 실행 시간을 추적하는이 바보 같은 스크립트가 있습니다.
start=$(date +'%Y-%m-%d %H:%M:%S') # This line converts to 2019-09-10 00:50:48
echo "$start"
./actual_script_runs_here
stop=$(date +'%Y-%m-%d %H:%M:%S')
echo "$stop"
이 방법이 작동합니다. 하지만 스크립트를 직접 실행하는 데 걸리는 시간을 계산해야합니다. bash에서 이것을 계산할 수 있습니까?
또는 time
명령을 사용할 수 있습니다 . 그러나 3 개의 새 줄로 3 개의 다른 시간을 반환합니다. 내 스크립트 결과와 함께 시간 결과를 한 줄로보고 싶습니다.
date +%s
쉽게 계산할 수있는 날짜 형식을 얻는 데 사용할 수 있습니다 (1970 년 1 월 1 일 00 : 00 : 00Z 이후 [주의 사항 포함] 초 수). 를 사용하여 ISO 형식 날짜를 다시 변환 할 수도 있습니다 (일광 절약 시간과 같은 문제로 인해 잘못되었을 수 있음) date -d "$start" +%s
. 다시 변환 할 때 DST 문제로 인해 이상적 일뿐만 아니라 프로그램이 실행되는 동안 누군가 시간을 변경하거나 ntp와 같은 작업이 수행되는 경우 잘못된 답을 얻을 수 있습니다. 아마도 매우 잘못된 것입니다.
윤초는 약간 오답을 줄 것입니다 (1 초 차이).
안타깝게도 시간의 소스 코드를 확인 time
하면 벽시계 시간 ( "단조"시간 대신)을 사용하는 것과 동일한 문제 가 있는 것으로 보입니다 . 고맙게도 Perl은 거의 모든 곳에서 사용할 수 있으며 단조로운 타이머에 액세스 할 수 있습니다.
start=$(perl -MTime::HiRes=clock_gettime,CLOCK_MONOTONIC -E 'say clock_gettime(CLOCK_MONOTONIC)')
과거 임의의 시점 이후 (리눅스에서는 부팅 이후로 머신이 일시 중단 된 시간은 제외) 이후 몇 초가 걸립니다. 시계가 변경 되더라도 초를 계산합니다. 쉘에서 실수 (정수가 아닌)를 처리하는 것은 다소 어렵 기 때문에 Perl에서 모든 것을 할 수 있습니다.
#!/usr/bin/perl
use warnings qw(all);
use strict;
use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC);
my $cmd = $ARGV[0];
my $start = clock_gettime(CLOCK_MONOTONIC);
system $cmd @ARGV; # this syntax avoids passing it to "sh -c"
my $exit_code = $?;
my $end = clock_gettime(CLOCK_MONOTONIC);
printf STDERR "%f\n", $end - $start;
exit($exit_code ? 127 : 0);
나는 그것을 "단조 적 시간"이라고 명명했다. "시간"처럼 사용됩니다 (자체 인수없이). 그래서:
$ monotonic-time sleep 5
5.001831 # appeared ≈5s later
$ monotonic-time fortune -s
Good news is just life's way of keeping you off balance.
0.017800
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다