내 장치에 대한 업데이트 루틴을 만들었습니다. 업데이트 프로세스는 직렬 콘솔, SSH, 텔넷, 웹 서버 또는 REST API를 사용하여 시작할 수 있습니다. 업데이트가 시작되면 업데이트가 완료되고 장치가 재부팅될 때까지 모든 소스에서 모든 사용자 입력을 차단하고 싶습니다. SSH, 텔넷, 웹 서버 및 REST 서버를 종료하는 것은 쉽지만 직렬 콘솔의 입력도 차단하고 싶습니다.
그래서 나는 다음과 같은 상황에 처해 있습니다.
- 사용자는
/dev/ttyS0
/의 직렬 인터페이스를 사용하여 연결합니다/dev/console
. - 쉘 세션이 닫히면 inittab이 세션을 다시 생성합니다.
- 업그레이드가 시작되면 사용자가 콘솔에 아무 것도 입력하는 것을 원하지 않으므로 해당 셸 세션에 대한 입력을 차단하고 싶습니다.
cat /dev/ttyS0
나는 cat /dev/console
쉘에서 입력을 "훔쳐" 입력을 차단할 수 있다는 것을 발견했습니다 . 이렇게 하면 (cat /dev/ttyS0 > /dev/null) &
입력을 보지 않고도 백그라운드에서 수행할 수 있습니다.
이 방법이 가능한가요? 내가 이 일을 하면 안되는 이유가 있나요? 더 좋은 방법이 있나요?
답변1
init
당분간 쉘이 활성화되지 않도록 구성을 일시적으로 변경하는 것이 좋습니다 .
당신이 언급했으므로 inittab
나는 당신이 를 사용하고 있다고 가정할 것입니다 . 이 방법으로 구성 파일을 sysvinit
변경 한 다음 실행하면 이 작업을 수행 할 수 있습니다 (구성 파일을 다시 읽고 내부 상태가 업데이트됩니다 ). 직렬 콘솔에서 실행되는 셸 버전 에 따라 셸 자체를 명시적으로 종료해야 할 수도 있습니다.inittab
init q
init
sysvinit