2017-09-17 3 views
0

DB를 통해 실행하여 항목을 다시 색인화해야하는 Java 프로그램이 있습니다. 이것은 일주일에 한 번해야하는 일입니다. 내가 프로그램을 실행하는 스크립트를 작성했습니다 :cronjob에서 스크립트가 작동하지 않습니다

var=$(which java) 
nohup $var -Xmx2048m -jar javaProgram.jar $* -d javaProgramResource -re > /nfs/inf/app_storage/logs/service/service_refresh.log 2>&1 & 

나는 그것이 일반적인되고 싶어 렸기 때문에 나는 변수에 자바 경로를 넣어 이유는, 우리가 자바는 모든 환경에서 서로 다른 위치에 설치합니다. 이 스크립트를 수동으로 실행하면 완벽하게 작동합니다.

./reindex.sh 

지금, 나는 일주일에 한 번이 스크립트 (아침 6시 매주 토요일을 실행하는 cron 작업을 만들고 싶었 - 많은있다 렸기 때문에이 작업의 지속 시간은 약 16 시간이다 DB에있는 항목). 대신 (I 수동으로 스크립트를 시작할 때 같은) 로그 파일에 편집 된 인덱스를 얻기의

0 6 * * 6 cd /locattion/of/the/file; ./reindex.sh 

, 난 그냥라는 메시지가 얻을 : 내 생각

nohup: invalid option -- 'X' 
Try `nohup --help' for more information 

을이 구문 오류입니다,하지만 나는 bash 스크립트와 명령에 익숙하지 않다.

+0

'nohup' 명령문 앞에있는 명령문에'set -x'를 추가하여 실행중인 명령이 출력되도록하십시오. –

+0

아마'which java'가 아무것도 반환하지 않는다는 것이 문제입니다. 빈 변수가 결석으로 처리되지 않도록 변수 대체를 인용해야합니다. –

+0

스크립트를 수동으로 호출하면 작동합니다. –

답변

0

해결책을 찾았습니다. .profile 파일에서 스크립트에 필요한 모든 변수가 있습니다. 간단히 .profile 파일의 경로를 cronjob에 추가 했으므로 제대로 작동했습니다. (그것이의 .profile 파일로 작성 렸기 때문에) 또한 모든 환경에서 다른 javaProgramResource의 이름,

0 6 * * 6 . $HOME/.profile; cd /locattion/of/the/file; ./reindex.sh 

이제 cronjob를 자바 경로를 알고있다. 너희들은 나에게이 주제에 대한 조사를 계속해야한다는 방향으로 중요한 정보를 주었다. 감사!

관련 문제