2011-05-05 3 views
2

java가 cron 또는 대화 형 쉘을 통해 실행되는지 여부를 감지하는 방법. 스크립트가 사용자 (쇼 오류 sys.out의 메시지) 또는 크론에 의해 호출되는 경우java가 cron 또는 쉘을 통해 실행되는지 확인합니다.

나는 당신이 추가 명령 줄 스위치를 통과 할 수 있습니다 당신의 crontab 작업에서

+4

왜 명령 줄 스위치에 의존하지 않습니까? 쉽게 더 쉽고 덜 해킹/더 강력합니다. – delnan

답변

6

을 (이메일로 오류를 보낼) 결정해야 -Dcron=true과 같으며 Java 코드 내부에서 논리를 분기 할 수 있습니다.

3

일반적으로 cron이 실행하는 작업의 stdout 및 stderr는 전자 메일의 cronjob 소유자에게 전송됩니다.

명시 적으로 처리하려는 경우 --cron과 같은 명령 줄 옵션을 cron 작업에 추가하십시오. 또는 더 일반적으로 [email protected] 어떤 호출이 이메일을 통해 출력을 보낼 수 있습니다.

+0

이메일을받은 편지함에 쇄도하고 싶지 않은 경우 <작업 명령> /home/user/cron_output.txt와 같은 일부 파일로 보낼 수도 있습니다. – Bhushan

0

-D 솔루션을 가장 휴대용으로 지원합니다.

아직 구성되지 않은 솔루션을 구현해야하고 UNIX와 같은 특정 유형 (예 : Linux)으로 자신을 제한해도 괜찮은 경우 프로세스 트리를 탐색하여 부모 중 누군가가 cron 프로세스인지 확인하십시오 :

리눅스에서

,은/proc/셀프/상태 읽기 : 당신이 PPID 1에 도달 할 때까지

cat /proc/self/status 
Name: bash 
State: S (sleeping) 
Tgid: 9872 
Pid: 9872 
PPid: 9870 
... 

그런 다음, 위의 PPID 항목에 따라,/proc 디렉토리/9870/상태를 읽고 ... 계속을, init입니다. cron을 찾을 곳이 없다면 cron이 아닙니다.

나는/proc/self 밑에서 프로세스가 실행되고있는 콘솔/tty가 무엇인지 직접적인 스펙을 찾을 수있을 것이라고 확신한다. (그렇지 않다면 cron이 아닌 데몬이어야한다.)하지만 couldn 당장 찾지 마.

관련 문제