2012-12-04 6 views
2

저는 Tripwire에 대한 대안을 개발하고 있습니다. 그래서 작은 스크립트를 코딩하여 JBoss EAP 서버에서 파일을 해시하고 경로와 해시를 MySQL에 저장합니다 데이터 베이스.자이 썬 2.5.3 및 time.sleep

매일 스크립트는 파일 시스템의 해시와 DB에 저장된 해시를 비교하므로 변경 사항이 기록되고 마지막으로 JasperServer를 사용하여보고됩니다.

스크립트는 밤에 cron을 사용하여 실행되므로 재미있는 작업을 수행하기 전에 time.sleep (RANDOM_NUMBER_OF_SECONDS)을 사용하는 동시에 많은 양의 스크립트를 DB에 저장하지 않아도되지만 때로는 time.sleep이 영원히 잠을 잘 수 있습니다. 스크립트는 오류없이 끝나고, 나는 cron send 메일을 체크하고 어떤 에러도 기록되지 않는다. 어떤 도움을 주시면 감사하겠습니다. 저는 jython-standalone-2.5.3, IBM의 JDK 및 VMWare에서 실행되는 RHEL 5.6을 사용하고 있습니다.

방금 ​​http://bugs.jython.org/issue1974을 찾았습니다. 코드 주석은 OS 신호가이 동작을 일으킬 수 있다고 지적하지만 이것이 내 경우인지는 확실하지 않습니다.

당신이 http://code.google.com/p/pysnapshot/

루이스 가르시아 부스 토스에서 코드를 체크 아웃을보고 싶다면

.

답변

0

time.sleep()은 DB를 쿼리하는 스크립트의 수가 적을 수 있다고 생각합니까?

해당 프로그램을 주기적으로 호출하려면 cron을 사용하는 것이 가장 좋습니다. 시작 후 디렉토리가 "semaphore"파일인지 확인해야합니다 (예 : /tmp/snapshot_working.txt). 세마포어 파일이 없으면 파일을 만들고 "snapshot started : 2012-12-05 22:00:00"와 같이 써주세요. 프로그램이 검사를 완료하면이 파일을 제거해야합니다. 시작 프로그램에서 세마포어 파일을 찾으면이 파일에 저장된 시간 & 시간이 "오래된 것"으로 보이는지 막을 수 있습니다. 그것이 "오래된"경우, 그것을 제거하고 "이전"파일이 발견 된 로그에 정상적으로 기록을 시작하십시오 (관리자는 그러한 긴 작업 스 내핑을 찾아 종료 할 수 있음).

time.sleep()은 데이터베이스에 DoS 공격을하지 않고 정상적인 근무 시간에 스크립트를 사용하려는 경우에만 사용하십시오. 예 : 100 개의 DB 쿼리를 작성한 후 거의 잠을 자지 않고 다른 사용자 쿼리를 제공 할 수있는 DB 시간을 제공 할 수 있습니다. 그러나 더 빨리 프로그램을 마치는 것이 더 좋다고 생각합니다.

+0

안녕하세요! 당신은 맞습니다. time.sleep을 사용합니다. 왜냐하면 MySQL은 100+ 서버에서 실행되는로드를 처리 할 수 ​​없기 때문에 모든 스크립트를 동시에 (일괄 처리 창에서) 시작하고 트랜잭션을 사용하기 때문에 - 왜냐하면 " 부분 스냅 샷 "은 무결성 검사 목적으로는 쓸모가 없습니다. MySQL은 간단히 처리 할 수 ​​없으며 트랜잭션이 중단되기 시작합니다. 따라서 복구를 위해 일종의"지수 적 백 오프 "를 사용합니다. 주요 문제는 작업을 다시 시도하기 전에 스크립트를 대기 (time.sleep 사용) 할 때 일어나지 않는 것입니다. 나는 스레딩을 전혀 사용하지 않고있다. – user1877237

+0

몇 개의 스크립트를 시작합니까? 그들은 동일한 MySQL 서버를 사용합니까? 하나의 파일 시스템을 확인합니까? 한 스크립트를 시작하여 다른 디렉토리 (긴 명령 행 또는 구성 파일) 다음에 하나의 디렉토리를 확인하십시오. –