체계적인 서비스를 만들었습니다.
[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
하면 메시지가 표시되지 않지만 서비스는 여전히 시작되지 않습니다.
답변
$HOME
스크립트를 실행중인 사용자의 홈 디렉토리를 가리 킵니다. 시스템 서비스는 루트로 시작되므로 시도 할 것 /root/theFolder/run.sh
입니다. 서비스 파일에서 절대 경로를 사용하십시오.
forking
옵션 세트 도 있습니다 . 이것은 배경 자체를 프로그램하는 데 필요합니다. 스크립트가 이것을합니까? 대부분의 경우와 그렇지 않은 경우이 옵션을 제거하지 않으면 systemd는 스크립트가 시작된 것으로 주장하기를 기다리는 중입니다.
또한 홈 디렉토리의 스크립트를 가리키는 시스템 서비스 파일은 사용하지 않는 것이 좋습니다. 그것들은 루트로 실행되기 때문에 그것들을 수정할 수있는 사람은 컴퓨터에 루트 액세스 권한을 얻을 수 있습니다. 스크립트를 복사하여 /usr/local/bin
소유하고 루트에 의해서만 쓰기를 허용 하여 스크립트 를 중지 하는 것이 훨씬 좋습니다 . 서비스 파일 의 User=
및 Group=
옵션을 사용하여 권한이없는 사용자로 스크립트를 실행하는 것이 좋습니다 .
사용자로 파일을 실행하려면 서비스 파일을 ~/.config/systemd/user/
넣고 시작 / 활성화하는 것이 좋습니다 systemctl --user enable yourservice && systemctl --user start yourservice
(참고 : 루트가 아닌 사용자로 실행). 사용자 서비스 파일에 대한 자세한 정보는 이것을 참조하십시오 .