내 컴파일된 프로그램이 init.d를 통해 실행 중이지만 결국 종료됩니다.

내 컴파일된 프로그램이 init.d를 통해 실행 중이지만 결국 종료됩니다.

C저는 전원 이벤트를 모니터링 udev하고 노트북 백라이트 밝기를 자동으로 조정하는 작은 유틸리티를 만들었습니다 . (저는 우분투 15.04를 사용하고 있습니다)

다음 명령을 실행했는데 시작 시 정상적으로 실행되었습니다.

$ sudo cp powermonitor /etc/init.d/powermonitor
$ sudo chmod +x /etc/init.d/powermonitor
$ sudo update-rc.d powermonitor defaults

하지만 CPU 사용량을 htop잠시 모니터링한 결과 이제는 사라진 것을 발견했습니다. 이 프로그램은 명령줄 인수를 허용하지 않지만 Linux는 다음을 통해 프로그램을 실행하려고 시도하는 것 같습니다.

/etc/init.d/powermonitor start

프로세스가 계속 실행되도록 하려면 어떻게 해야 합니까?

편집: 명확히 하기 위해 powermonitor스크립트가 아닌 실행 파일입니다.

답변1

의 파일은 /etc/init.d실행 파일로 컴파일되어서는 안 됩니다. 컴파일된 실행 파일을 다른 곳에 두고 /usr/local/bin다음을 작성할 수도 있습니다.초기화 스크립트에서는 /etc/init.d컴파일된 프로그램을 시작하고 중지하는 방법을 알고 있습니다. 일반적으로 이는 시작하기 위해 백그라운드에서 실행한 다음 PID(또는 사용된 실행 파일 이름 killall)를 종료하여 중지하는 것만 큼 간단합니다. init 스크립트는 , , &c init라는 단어라는 단일 인수를 사용하여 호출됩니다 . 서비스 자체를 실행하는 방법을 아는 것은 스크립트의 책임입니다.startstoprestart

빠른 소개를 원하시면 다음을 시도해 보세요.여기. /etc/init.d상황에 맞게 변경할 수 있는 샘플 뼈대 스크립트가 디렉터리에 있을 수 있습니다 .

그런데, 어떤 배포판을 실행하고 있나요? 이제 많은 최신 배포판은 기본적으로 IMO 단위 파일 대신 선언적 단위 파일을 사용하여 실행됩니다 systemd. sysvinitsystemd는 sysvinit 호환 모드를 제공하므로 직접 실행할 수 있습니다. 그렇다면 스크립트보다는 유닛 파일을 작성하는 것을 추천합니다.

관련 정보