2012-07-08 4 views
0

저는 mips 기반 시스템 (특히 라우터의 openwrt)에서 linux를 실행하고 있습니다.재부팅 명령의 리디렉션 효과

재부팅 (busybox 제공) 즉, reboot 만 실행하면 시스템이 재부팅되지만 일부 서비스 (webserver, dhcp/dns, dsl 등)가 시작되지 않습니다.

그러나 웹 인터페이스를 통해 재부팅하면 모든 서비스가 정상적으로 시작됩니다. 나는 코드를보고 웹 인터페이스가 reboot > /dev/null 2>&1으로 실행되는 것을 보았다. 이 명령을 실행하면 서비스가 재부팅되고 서비스가 제대로 시작됩니다.

제 질문은/dev/null로 stdout 및 stderr을 리디렉션하면 다음에 부팅 할 때 서비스가 시작되는 데 어떻게 영향을 줍니까?

또한 궁금한 사항이 있습니다. 재부팅하면 아키텍처 관련 코드가 포함되어 있습니까?

+1

당신의 주된 질문에 대해서는 전혀 알지 못하지만 "userspace program * ['reboot (8)'] (http://linux.die.net/man/8/reboot)는 단지 루트 전용 시스템 호출을한다. ['reboot (2)'] (http://linux.die.net/man/2/reboot); 거기에는 아키텍쳐에 특화된 것이 없으며 (또한 Linux는 개념 *에있어서 특정 적이지도 않습니다. 세부 사항은 다르긴하지만 메모리가 작동한다면 V7로 돌아가는 이름으로 시스템 호출이있었습니다). * 재부팅 과정에는 아키텍처 관련 코드가 포함되어 있지만 커널 및/또는 펌웨어에 모두 포함되어 있습니다. – zwol

답변

2

아니요, stdout/stderr을 리디렉션하면 부팅 프로세스에 영향을 미치지 않아야하며 어디에 저장해야합니까? 이 문제를 일으키는 다른 것이 있어야합니다.

"shutdown -r now"가 작동합니까?

+0

시스템에 shutdown이 존재하지 않거나 busybox의 일부인 것처럼 보이지 않습니다. 그러나 재부팅 man.8 페이지로 안내 한 Zack 덕분에 옵션없이 실행할 때 재부팅이 종료됩니다. 또한'reboot -f'가 실행될 때 syscalls는 reboot()를 실행합니다. 이렇게하면 시스템이 올바르게 재부팅됩니다. [휴식] 나는 아마 내 질문을 잘못 인용했다. 나는 리디렉션이 프로세스에 직접 영향을주는 것은 아닙니다. 리디렉션이 재부팅 프로세스를 "제거"하는 데 도움이된다고 생각합니다. (std 스트림을/dev/null로 리다이렉트하는 것은 데몬 시네이킹의 일부이다.) 제대로 작동하는'reboot &'을 실행하여 이것을 테스트했다. – rhlee

+1

아마도 다음과 같은 일이 일어 났을 것입니다. 시스템이 서비스를 중지하기 위해 재부팅을 트리거합니다. 그러나 이로 인해 프로그램/스크립트가 종료되고 보류중인 reboot 명령도 종료됩니다. 그런 다음 본질적으로 재부팅을 완료하지 않고 "부분적으로 종료 된"시스템으로 끝납니다. reboot 명령을 분리하는 것은 좋은 생각입니다. killall 명령에는 종료를 위해 내장 된 예외가 있어야합니다. –

+0

그게 틀림 없어. reboot 명령에 의해 reboot() 시스템 콜이 호출되지 않았을 수도 있습니다. 재부팅 소스 코드를 보면 재부팅을 실행하기 전에 모든 프로세스를 종료하려고 시도합니다. 따라서 상위 쉘 프로세스를 종료하면 하위 재부트 프로세스가 조기에 종료 될 수 있습니다. uptime 명령을 사용하여 '재부팅'이 실제로 재부팅되었는지 확인하기 위해이를 테스트 해보고자했습니다. 그러나 마술적인 이유로'재부팅'을하는 것이 이제는 자기 자신의 것입니다. – rhlee