Linux 시스템 종료 중에 프로세스를 시작할 수 있습니까?


1

이 질문은 동시에 여러 개의 자체 실행 인스턴스를 방지하기 위해 잠금을 유지하는 스크립트에 관한 것입니다.이 인스턴스는 다양한 프로세스에 의해 특정 시간에 실행되며 특정 상황에서 재부팅 명령을 보냅니다.

재부팅이 요청되고 스크립트가 몇 초 동안 잠자기 시작합니다 (재부팅이 시작되기 전에 잠금이 해제되지 않도록). 그런 다음 스크립트는 신호를 수신하고 자체적으로 종료됩니다 (이로 인해 잠금 해제).

질문 : 재부팅 이벤트에 의해이 스크립트가 이미 중지되어 있고 스크립트를 다시 시작하도록 관리하는 다른 프로세스가 아직 실행중인 시간 창이 있습니까?

개인적으로 리눅스 시스템은 일반적으로 새로운 프로세스의 실행이 일반적으로 금지되는 상태로 전환되고 그 후에 실행중인 프로세스가 중단된다는 느낌이 듭니다. 그러나 이것에 관한 문서를 찾을 수 없기 때문에 이것은 단지 희망적인 생각입니다.

몇 가지 설명 :

a) 잠금 파일이 제대로 제거되지 않은 것이 아닙니다. flock을 사용하면 충돌이 발생하더라도 스크립트가 종료되는 순간 잠금이 사라집니다.

b) 대부분의 경우 스크립트는 at deamon에 의해 루트 권한으로 시작됩니다.

답변:


0

당신의 개인적인 감정에는 진실이 있습니다.

자세한 내용은 다루지 않지만 Linux 부팅 프로세스는 다음과 같이 요약 할 수 있습니다. init가 더 이상 항상 기본값이 아니기 때문에 변경 될 수 있습니다.

  1. 부트 로더는 리눅스 커널과 init.
  2. init 그런 다음 점검 목록을 살펴보고 실행 모드를 통과하기 시작합니다.
  3. init단일 사용자 모드라고도하며, 여기에서 작동 시스템에 필요한 서비스가 시작됩니다. 루트에 속하는 프로세스 만 시작할 수 있습니다.
  4. init런레벨 2로 들어갑니다. 위와 비슷하지만 다중 사용자 모드입니다. 다른 사용자의 프로세스가 파티에 참여합니다.
  5. 런레벨 3은 네트워크를 시작합니다.
  6. 4를 건너 뜁니다 (이유를 이해하지 못했습니다. 나중에 사용할 수 있도록 영구적으로 예약되어 있습니다). init대신 5가 바로 xorg시작 되며 여기서 시작됩니다. 많은 사용자 공간 서비스 (웹 서버, 메일 등)가 여기에서 일반적으로 시작됩니다.

이제 귀하의 질문에 대답하기 위해 시스템 종료 프로세스 중에 스크립트가 시작될 가능성이 거의 없습니다. 올바르게 기억하면이 프로세스 중에 새로운 프로세스를 정상적으로 시작할 수 없습니다. 내가 이해 한 것에서, 주요 관심사는 스크립트가 시작되고 재부팅하는 동안 남겨진 잠금 파일을 남겨두고 스크립트가 실행되지 못하게한다는 것입니다. 이 경우 내가 할 일은 실행 레벨 3에서 작은 시작 스크립을 사용 하여이 잠금 파일을 발견하면 삭제하는 것입니다.


감사! 몇 가지 설명을 추가했습니다. 잠금이 제대로 제거 된 것이 아니라 스크립트에 대한 루트가 다시 시작되고 재부팅으로 인해 다른 버전이 종료 된 것입니다.
philipp

SysVinit에서 실행 레벨이 작동하는 방식은 아닙니다. 최소한 "일반적인"2-5는 아닙니다. 대부분의 시스템에서는 실제로 "레벨"이 아니라 완전히 별도의 모드이며 부팅 시스템은 'sysinit'스크립트를 완료 한 후 바로 실행 레벨 5로 이동합니다. (또는 2. 또는 3. 종종 동일한 구성을 갖습니다.)
grawity
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.