시작 시 실행되는 스크립트가 있는데 로그 파일에 오류가 표시됩니다. 수동으로 실행하면 정상적으로 실행됩니다. 환경이 변경되었을 수도 있습니다.
재부팅하지 않고 시작할 때 이와 같은 스크립트를 실행할 수 있는 방법이 있습니까?
스크립트는 /etc/init.d
심볼릭 링크와 함께 위치합니다 /etc/rc5.d/S97mounter.sh
.
답변1
루트로 실행할 수 있습니다
env - scriptname
이렇게 하면 스크립트를 실행하기 전에 환경이 지워지지만 환경을 shell
지우고 셸을 다음으로 설정 하려면 sh
.
env -i /bin/sh -c scriptname
그러면 이는 스크립트를 실행하는 데 사용됩니다 /bin/sh
. 그러나 이는 당시 실행되지 않을 수 있는 다른 서비스를 고려하지 않기 때문에 부팅 환경을 완전히 시뮬레이션하지 않습니다.
crontab 환경 시뮬레이션에 대한 비슷한 질문을 발견하고 매우 유용한 솔루션을 게시했습니다.어 허.
이를 사용하면 스크립트에서 실행하고 호스트를 재부팅한 다음 환경 파일을 사용하여 환경을 로드할 수 있습니다.
시작 스크립트의 일부:
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 기본값입니다.