부팅 시 실행되는 것처럼 스크립트를 실행하는 방법은 무엇입니까?

부팅 시 실행되는 것처럼 스크립트를 실행하는 방법은 무엇입니까?

부팅 시 실행 중인 스크립트가 있는데 로그 파일에 오류가 표시됩니다. 수동으로 실행하면 정상적으로 실행됩니다. 아마도 환경이 변경되었을 것입니다.

다시 시작하지 않고 부팅 시 실행 중인 조건에서 이러한 스크립트를 실행할 수 있는 방법이 있습니까?

/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 기본값입니다.

답변3

스크립트가 수행하는 작업과 발생하는 오류에 대한 추가 정보가 없으면 정확한 답변을 제공하기가 어렵습니다. 그러고 보면 아마도 그럴 것이다.가능한환경을 재현하는 것은 매우 어려울 수 있습니다. 파일 시스템을 마운트 해제하거나 바인드 마운트하거나 기타 재미있는 작업을 수행해야 하기 때문입니다.

대안은 다음과 같은 것을 사용하여 가상 머신을 만드는 것입니다.버추얼박스또는KVM이를 사용하여 디버깅을 수행하면 호스트 시스템을 재부팅할 필요 없이 필요한 만큼 자주 가상 머신을 재부팅할 수 있습니다.

관련 정보