Perl에 처음 접했습니다. 리눅스 컴퓨터에 Perl 스크립트가 있습니다.이 스크립트는 자체 로그 파일을 가지고 있습니다. 로그 파일 이름은 스크립트가 작동하는 데이터 (날짜, 파일 이름, 데이터 유형 등)에 따라 달라질 수 있습니다.Perl 스크립트는 cron에서 실행할 때 파일에 STDOUT을 출력하지 않습니다.
일부 pionts의 스크립트는 일부 정보를 STDOUT에 제공하는 system() 호출로 원시 실행 파일을 호출합니다. STDERR - 몇 분에 걸쳐 수십에서 수 백 라인. 실행 파일이 완료되면 스크립트는 계속 진행하고 로그 파일에 다른 정보를 기록합니다.
지금까지 스크립트는 고유 한 실행 파일 출력없이 Perl 스크립트 로그와 동일한 파일에 로그인하기 위해 자체 출력 만 기록했습니다.
#!/usr/bin/perl
#some other code
@array_executable_and_parameters = qw/echo foo/ ;
open $log_fh, '>>', 'log/logfile1.txt';
*STDOUT = $log_fh;
*STDERR = $log_fh;
print "log_fh=$log_fh\n";
system(@array_executable_and_parameters);
$logfilename='log/logfile2.txt';
open(LOGFILEHANDLE, ">>$logfilename");
*STDOUT = LOGFILEHANDLE;
*STDERR = LOGFILEHANDLE;
print LOGFILEHANDLE "Somethinglogged\n";
system(@array_executable_and_parameters);
이 스크립트는 수동으로 실행할 때 작동하지만 cron을 실행할 때는 작동하지 않습니다.
리눅스에서 crontab을 리다이렉트하는 것이 가능하다는 것을 알고 있지만, 로그 할 파일 이름을 알아야합니다. 일부 데이터가 도착할 때만 알려 지므로 필자에게 적합하지 않은 것으로 보입니다. 필자는 스크립트 내에서 최대한 많은 것을 가지고 싶습니다. Linux 등등에 많은 의존성이 없기 때문에, Perl을 사용하기위한 라이브러리를 추가로 설치할 필요가 없습니다. 최소한의 설치라고 가정하십시오.
어떻게하면 STDOUT 및 STDERR을 Perl 스크립트 내부에서 특정 파일로 리디렉션합니까?
그리고 가능한 경우 현재 STDOUT이 (가)가는 파일 이름을 어떻게 감지합니까?
방법이있다 Perl 스크립트가 호출되었고'system()'을 얼마나 정확하게 호출하고 있습니까? * * * * * /home/username/perl/myscript.pl 수동 : 실행 파일과 같은 스크립트 내부에서 호출 ./home/username/perl/myscript.pl : crontab을에서 – tripleee
시스템 (@array_executable_and_parameters); – uldics
당신의 대화식 예제는'/ home' 앞에 점을 가지고있어서 당신이 루트 디렉토리에 있지 않으면 그것들은 동일하지 않습니다; 그러나 나는 그것이 거짓 정보라고 생각합니다. 데모 스크립트에서 간단한'system()'호출로 질문을 편집 할 수 있습니까? – tripleee