부팅 시 실행 중인 스크립트가 있는데 로그 파일에 오류가 표시됩니다. 수동으로 실행하면 정상적으로 실행됩니다. 아마도 환경이 변경되었을 것입니다.
다시 시작하지 않고 부팅 시 실행 중인 조건에서 이러한 스크립트를 실행할 수 있는 방법이 있습니까?
/etc/init.d
스크립트는 의 심볼릭 링크와 함께 에 있습니다 /etc/rc5.d/S97mounter.sh
.
답변1
루트로 실행할 수 있습니다
env - scriptname
이렇게 하면 스크립트를 실행하기 전에 환경이 지워지지만 shell
. 환경을 지우고 셸을 로 설정하려면 sh
다음을 수행합니다.
env -i /bin/sh -c scriptname
그러면 를 사용하여 스크립트가 실행됩니다 /bin/sh
. 그러나 이는 해당 시점에 실행되지 않을 수 있는 다른 서비스에 포함되지 않으므로 부팅 환경을 완전히 시뮬레이션하지는 않습니다.
crontab 환경을 시뮬레이션하기 위해 비슷한 질문을 찾았으며 게시된 매우 유용한 솔루션이 있습니다.mmccoo.
이를 사용하면 스크립트에서 이를 실행하고 호스트를 재부팅한 다음 환경 파일을 사용하여 환경을 로드할 수 있습니다.
부팅 스크립트의 일부:
env > /var/tmp/bootenv
그런 다음 일반 런타임에 동일한 부팅 환경을 설정하려면 다음을 수행합니다.
env - `cat /var/tmp/bootenv` /bin/sh -c scriptname
답변2
시작 스크립트가 아닌 사용자 세션을 통해 프로그램이 시작될 때 다를 수 있는 몇 가지 사항은 다음과 같습니다.
- 프로그램은 많은 환경 변수(
PATH
,HOME
, ... 포함)를 상속받습니다. - 프로그램은 터미널을 포함하여 여러 파일 설명자를 상속합니다.
- 한도는 다를 수 있습니다.
최소한의 환경에서 프로그램을 실행하고 표준 파일 설명자를 닫으려면 다음과 같은 것을 사용할 수 있습니다.
env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin myprogram </dev/null >/dev/null 2>/dev/null
init
어떤 환경 변수가 정의되어 있는지 알아보려면 시스템의 매뉴얼 페이지나 기타 문서를 확인하세요 . 데몬으로 실행되도록 고안된 많은 프로그램은 필요하며 PATH
그 외에는 아무것도 필요하지 않습니다. 위의 값 PATH
은 Debian의 init 기본값입니다.