2011-02-23 4 views
1

메인 (일괄) 프로그램이 많은 프로세스 제어를하는 큰 쉘 스크립트 세트를 통해 작동하는 중형 프로젝트를 상속했습니다 잠자기, 조건 확인 등) [및 perl 스크립트를 통해 다시 처리]BASH 쉘 프로세스 제어 - 제어/스케줄링 작업의 다른 예제

쉘 스크립트에 의한 프로세스 제어의 다른 예가 있습니까? 저는 다른 사람들이 비교로 한 것을보고 싶습니다. (내가 6,668 라인 셸 스크립트를 정말로 좋아하지 않기 때문에)

현재 프로그램이 작동하고 유지 보수상의 이유로 엉망이 될 필요가 없으며 다른 방법으로 사용하기도합니다 유지 관리가 더 쉬울 것이지만 다른 예제가 필요합니다. procsup

+0

이 질문은 공개적으로 작성되었습니다. 자신이 갖고있는 것의 예를 (메타) 게시하여 더 잘할 수 있다고 생각할 수 있습니까? –

+0

[Process Management] (http://mywiki.wooledge.org/ProcessManagement)는 유용 할 것입니다. –

답변

0

이 매우 일반적인 문제이며, 따라서 구체적인 답변을 제공하는 것은 조금 어려울 수 있습니다 :

여기에 내가 무엇을 찾고의 예입니다 질문의 "보편성"을 줄일 수 있습니다. (그리고 5000 라인의 긴 예제가 만족스럽지 않을 것입니다.) 대부분의 경우 응용 프로그램의 아키텍처가 잘못되어 다소 재 작업이 필요합니다.

당신은 아마 이미 아시다시피, 배쉬와 공정 제어는 매우 간단하다 :

./test_script.sh & 
test_script_pid=$! 
wait $test_script_pid # waits until it's done 
./test_script2.sh 
echo $? # Prints return code of previous command 

당신은 (분명, 또는 펄) 파이썬 subprocess 예와 같은 일을 할 수 있습니다. 서로 다른 많은 프로그램을 가진 복잡한 아키텍처를 가지고 있다면 프로세스는 명백하게 중요하지 않습니다.

+0

작업을 백그라운드에서 실행 한 다음 작업이 끝날 때까지 기다렸다가 왜 그 작업을 마무리 했습니까? –

+0

@Jonathan : 백그라운드에서 실행될 때 다른 작업을 수행 할 수 있습니다. 예를 들어 동시에 여러 작업을 시작한 다음 각각 기다릴 수 있습니다. 이 목록은 구문의 예일뿐입니다. – Olli

+0

@Jonathan : 이렇게하는 또 다른 큰 이유는 매달린 명령 등으로부터 자신을 격리 할 수 ​​있기 때문입니다. 예를 들어 타이머를 시작하고 백그라운드 작업을 죽일 수 있습니다. – ostergaard

0

이것은 끔찍한 버그 쉘 스크립트입니다. 리팩터링을 고려해 보셨습니까?

소리가 나면 여러 줄의 코드를 셸 함수 호출로 바꿀 수있는 경우가 많이있을 수 있습니다. 이런 방식으로 코드를 단순화 할 수 있다면 논리에 오류가있는 곳을보다 쉽게 ​​파악할 수 있습니다.

거대한 PERL 스크립트를 사용하여이 전략을 성공적으로 사용 했으므로 심각한 로직 오류가 발생했고 쉽게 되돌릴 수있는 방식으로 난독 화 된 암호가 포함되어있어 보안 상 위험한 것으로 나타났습니다. 노출 된 암호는 알려지지 않은 사람 (불만스런 직원)이 전체 글로벌 네트워크를 종료하는 데 사용될 수있었습니다.

일부 스크립트는이 스크립트가 매우 중요하기 때문에 보안 예외 처리에 기울어 져 있었지만 논리 오류를 설명하고이 스크립트가 잘못된 데이터를 제공한다는 것이 분명 해지면 어떤 데이터도 더러운 데이터보다 우수하지 않다고 판단되었습니다 . 그 대본을 쓴 사람은 PERL 서적과 대본 작성으로 프로그래밍을 가르쳤습니다.

+0

예,이 질문을 묻는 리팩토링을 고려하고 있습니다. 더 많은 것들이 내가 할 수있는 기존의 도서관이 다른 곳의 카드를 짓거나 그대로 둘 수 있습니다. 그것은 중요한 생산 코드이기 때문에 나는 "그것으로 엉망이되어서는 안된다"라고 기댈 것입니다. – jim

+0

@jim : 파산하지 않았다면 ... – ostergaard

관련 문제