2013-07-31 2 views
-1

Ok 나는 내 머리카락을 꺼내려고합니다. 나는 crontab에서 실행되지 않는 perl 스크립트를 가지고있다. 그러나 나는 같은 상자에서 매일 잘 실행되는 펄 스크립트를 가지고있다. 나는이 사이트와 다른 웹 사이트에서 주어진 솔루션을 모두 확인했지만 아무런 차이가없는 것으로 보인다. 여기 내 크론과 내 스크립트의 첫 부분입니다perl이 cron에서 실행되지 않습니다.

55 13 * * * su oracle; cd /u02/oraclebackup;./move_em_bkup.pl >> /u02/oraclebackup/move_em_backup.log > move_em_bkup.dbg 2>$1 

그것은 .dbg 파일에 닿지 만 아무 것도 넣지 않습니다. 나가기 위해 사용할 수있는 오류나 아무 것도 없습니다.

#!/usr/bin/perl 
use Strict; 
use Archive::Tar; 
use Net::SCP qw/ scp /; 
use Net::SCP::Expect; 
use DateTime; 

아무도 도와 줄 수 있습니까?

+0

나는 cron 작업에서 perl 경로를 지정하려고 시도했지만 아무런 차이가 없다. –

+0

표준 출력을 두 곳으로 리디렉션하고 있습니다. 무슨 일이 일어날 것으로 예상됩니까? – mob

+1

'2> $ 1' 대신'2> & 1'을 (를) 사용하셨습니까? – mob

답변

2

실행중인 명령은 다음과 같습니다

su oracle; cd /u02/oraclebackup; ... 

su oracle

는 일반적으로 (당신이 그렇게 할 수있는 권한이 가정) oracle 계정으로 대화 형 쉘을 시작합니다. 비 -interactive cron 환경에서 어떤 작업을 수행 할 지 확신 할 수 없지만 작동한다고 가정해도 cd /u02/oraclebackup 및 그 이하의 하위 명령은 쉘이 종료되는 이후 후에 실행됩니다 (즉, crontab을 소유 한 계정으로). su oracle은 명령의 나머지 부분을 차단하거나 아무 것도하지 않습니다.

su -c command을 사용하여 지정된 사용자로 명령을 실행할 수 있습니다. 당신이 경우에, 당신은 뭔가 싶어 :

su -c oracle sh -c 'cd /u02/oraclebackup; ...' 

을하거나 oracle 계정의 로그인 환경을 필요로하는 경우 su -su을 변경합니다.

더 나은 점은 su을 놓고 모든 것을 oracle 계정의 crontab에 넣는 것입니다. 환경을 올바르게 유지하기 위해 더 많은 트릭을 수행해야 할 수도 있습니다. cron 작업은 기본적으로 제한된 환경 변수 세트로 실행됩니다.

+0

현재 작동하고있는 것 같지만 왜 확실하지 않습니다. 우리는 oracle crontab을 사용하고 있지만, 나는 여기서 일하기 전에 다른 작업들이 어떻게 생성 되었는가에 대한 su oracle을 가졌습니다. –

+0

대개'su oracle -c '...''가 아닌가요? Mac OS X의 개요는'su [-] [-flm] [login [args]]'입니다. 여기서'oracle'은 로그인이고'-c '...'는 쉘에 대한 인수입니다. 문제의 기본 분석은 정확하다. 그러나 제안 된'su -c oracle -c '...' '구제가 정확하다고 생각하지 않는다. (첫 번째'-c'를 사용해서는 안된다.) –

+0

@JonathanLeffler : Linux의 man 페이지는'su -c command username'이라고 말합니다; 개요는'su [options] [username]'이고'-c COMMAND'는 옵션 중 하나입니다. 하지만'su username -c command'도 나에게 도움이된다. –

관련 문제