서비스를 시작하지 못했습니다


15

체계적인 서비스를 만들었습니다.

[Unit]
Description=My service

[Service]
Type=forking
ExecStart=/bin/sh $HOME/theFolder/run.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target
Alias=mine.service

/ etc / systemd / system 폴더에 넣고 이름을 mine.service로 지정했습니다.

내가 그것을 실행 sudo service mine start하면 나에게 준다 :

mine.service.Unit을 시작하지 못했습니다. mine.service를 찾을 수 없습니다

--- 업데이트 -----

먼저 실행 sudo systemctl daemon-reload하면 메시지가 표시되지 않지만 서비스는 여전히 시작되지 않습니다.


10
systemctl daemon-reload단위 파일을 만든 후 실행 했습니까 ?
Wieland

@Wieland : Hmm .. 이제 메시지가 표시되지 않지만 여전히 시작되지 않습니다.
George

@don_crissti : 상태는 활성 상태이지만 스크립트 (ExecStart)는 실행되지 않습니다.
George

적절한 $ HOME을 어떻게 알 수 있습니까? 시스템 서비스에 대한 기대치는 무엇입니까?
Serge

@Serge : Hmm .. 그러면 $ HOME을 어떻게 사용할 수 있습니까?
George

답변:


14

$HOME스크립트를 실행중인 사용자의 홈 디렉토리를 가리 킵니다. 시스템 서비스는 루트로 시작되므로 시도 할 것 /root/theFolder/run.sh입니다. 서비스 파일에서 절대 경로를 사용하십시오.

forking옵션 세트 도 있습니다 . 이것은 배경 자체를 프로그램하는 데 필요합니다. 스크립트가 이것을합니까? 대부분의 경우와 그렇지 않은 경우이 옵션을 제거하지 않으면 systemd는 스크립트가 시작된 것으로 주장하기를 기다리는 중입니다.

또한 홈 디렉토리의 스크립트를 가리키는 시스템 서비스 파일은 사용하지 않는 것이 좋습니다. 그것들은 루트로 실행되기 때문에 그것들을 수정할 수있는 사람은 컴퓨터에 루트 액세스 권한을 얻을 수 있습니다. 스크립트를 복사하여 /usr/local/bin소유하고 루트에 의해서만 쓰기를 허용 하여 스크립트 를 중지 하는 것이 훨씬 좋습니다 . 서비스 파일 의 User=Group=옵션을 사용하여 권한이없는 사용자로 스크립트를 실행하는 것이 좋습니다 .

사용자로 파일을 실행하려면 서비스 파일을 ~/.config/systemd/user/넣고 시작 / 활성화하는 것이 좋습니다 systemctl --user enable yourservice && systemctl --user start yourservice(참고 : 루트가 아닌 사용자로 실행). 사용자 서비스 파일에 대한 자세한 정보는 이것을 참조하십시오 .


: 스크립트를 / usr / local / bin에, 서비스를 /.config/systemd/user에 넣었습니다. 서비스를 활성화하려고하면 "초과 인수"가 표시됩니다. systemctl을 사용하려고하면 '실패 함' .. unit .. ', 이와 같은 것.
George

시도한 전체 명령과 더 자세한 로그를 제공 할 수 있습니까? 조각으로 디버깅하기가 어렵습니다.
Michael Daffin

: 나는 / usr / 지방 / 빈에 스크립트를 넣어 경우 $ 집 에나가 본에, 그것은 상대 경로를 사용하기 때문에 $ 홈 경로를 사용하는 솔루션이 있습니까 .And 내가 넣어 노력 HOME=$HOME최초의 환경 파일에. 그러나 서비스를 시작할 수 없습니다. 오류가 없습니다.
George

1
우분투에 나는 "초과 인수"오류가있어 systemd 사용이 systemd하지 않는 systemctl를 사용했다
알렉산더 밀스

1
@AlexanderMills 맞습니다. systemctl 및 systemd의 올바른 명령은 답의 오타 일뿐입니다.
Michael Daffin 2009 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.