exec
PHP와 bash를 통해 애플리케이션을 실행합니다. 내 문제는 이것이 매우 큰 로그 파일을 생성한다는 것입니다. 초당 모든 활동에 대한 로그가 아닌 마지막 출력만 필요합니다.
이것은 내 격찬이다:
%s > %s 2>&1 & echo -n $! > %s
출력 파일을 추가하지 않고 다시 작성하려면 어떻게 수정해야 합니까?
전체 스크립트는 다음과 같습니다:
exec(sprintf("%s > %s 2>&1 & echo -n $! > %s", $cmd, $outputfile, $pidfile));
이것은 나의 완전한 프로그램입니다:
$kovNev = 'uid1_fil_'.time();
$cmd = 'btdownloadheadless --saveas /var/www/virtual/tigyisolutions.hu/boxy/htdocs/downloaded_torrent/'.$kovNev.'/ '.$_REQUEST["torrent"];
$outputfile = 'downloaded_torrent/folyamatok/'.$kovNev.'.txt';
$pidfile = 'downloaded_torrent/folyamatok/'.$kovNev.'_id.txt';
exec(sprintf("%s 2>&1 | tail > %s& echo -n $! > %s", $cmd, $outputfile, $pidfile));
답변1
> $outputfile
파일을 추가하지 않고 덮어씁니다. >>
파일에 추가됩니다. 어쨌든 쉘 구성을 사용할 때 파이프를 사용할 수 있습니다.
%s 2>&1 | tail > %s &
참고: 이는 경로에 특수 문자가 포함되지 않은 경우에만 작동합니다. 더 나은 해결책은 다음과 같습니다.
'%s' 2>&1 | tail > '%s'& echo -n $! > '%s'
이렇게 하면 ' 자체를 제외한 경로와 관련된 모든 문제가 방지됩니다.