현재 개발 중인 C 프로그램인 실행 파일이 있습니다. 구성 파일을 로드합니다. 이에 따라 특정 동작이 수행됩니다. 이것은 테스트되었으며 셸에서 시작할 때 작동합니다.
하지만 저는 시스템부터 시작하고 싶어서 서비스를 제공하고 있습니다. 서비스는 부팅 시 실행 파일을 시작합니다.
이렇게 하면 프로그램은 항상 파일이 무시된 것처럼 기본 동작을 갖게 됩니다.
이유가 있어서 이런 일이 일어나는 걸까요? 내 현재 추측으로는 어떤 이유로 파일에 액세스할 준비가 되지 않았을 때 프로그램이 시작될 수 있다는 것입니다(내 프로그램은 사용자가 직렬 포트를 통해 시스템에 로그인하기 훨씬 전에 예상대로 프레임 버퍼에 쓰기 때문입니다).
이것이 맞는지, 어떻게 고칠 수 있는지 모르겠습니다. 미리 감사드립니다.
답변1
실행 파일이 현재 작업 디렉터리에서 구성 파일을 찾나요? 그렇다면 부팅 시 시작된 모든 서비스는 /
서비스에서 명시적으로 다르게 지정하지 않는 한 일반적으로 작업 디렉터리가 로 설정된다는 점을 알아야 합니다.
.service
파일 에서 다음과 같은 줄을 사용할 수 있습니다
WorkingDirectory=/home/user/demo
cd
필요한 디렉터리에 도달한 서비스 프로세스를 시작합니다 . man systemd.exec
자세한 내용은 참조하십시오 .
아니면 실행 파일이 환경 변수 값을 HOME
구성 파일 경로 이름의 일부로 사용하려고 합니까? 서비스는 HOME
환경 변수를 전혀 설정할 필요가 없습니다 . 필요한 경우 .service
다음 줄을 사용하여 파일 에 설정할 수 있습니다 .
Environment="HOME=/home/user"
그러나 이는 시스템 서비스로 실행되는 프로그램의 경우 다소 예상치 못한 일입니다. 대신 다른 환경 변수를 사용 HOME
하고 명시적으로 기록할 수도 있습니다.
아직 지정하지 않은 경우 프로그램 내에서 구성 파일의 위치를 전체 경로 이름으로 지정할 수 있습니다.