나는 시스템 서비스를 만들었습니다.
[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
다음이 제공됩니다.
광산을 시작할 수 없습니다.서비스를 찾을 수 없습니다.유닛 광산.서비스를 찾을 수 없습니다
- - 갱신 - - -
먼저 실행했는데 sudo systemctl daemon-reload
아무런 메시지도 표시되지 않지만 서비스가 여전히 시작되지 않습니다.
답변1
$HOME
스크립트를 실행하는 사용자의 홈 디렉터리를 가리킵니다. Systemd 서비스는 루트로 시작되므로 이 작업을 시도할 수 있습니다 /root/theFolder/run.sh
. 서비스 파일에는 절대 경로를 사용하십시오.
옵션을 설정할 수도 있습니다 forking
. 이는 자체 백엔드의 프로그램에서 필요합니다. 스크립트에서 이를 수행합니까? 대부분은 그렇지 않으며 그렇지 않은 경우 이 옵션을 제거해야 합니다. 그렇지 않으면 systemd는 스크립트가 완료되어 시작되었다고 선언할 때까지 기다립니다.
또한 시스템 서비스 파일을 홈 디렉터리의 스크립트로 지정하는 것은 권장되지 않으며 보안 문제가 될 수 있습니다. 루트로 실행되기 때문에 이를 수정할 수 있는 사람은 누구나 잠재적으로 컴퓨터에 대한 루트 액세스 권한을 얻을 수 있습니다. /usr/local/bin
이를 방지하려면 스크립트를 복사하여 루트가 소유하고 루트만 쓸 수 있는지 확인하는 것이 가장 좋습니다 . services 파일의 및 옵션을 사용하여 User=
권한이 없는 사용자로 스크립트를 실행하는 것도 좋은 생각입니다 .Group=
사용자로 실행하려면 서비스 파일을 넣고 ~/.config/systemd/user/
시작/활성화 하는 것이 좋습니다 systemctl --user enable yourservice && systemctl --user start yourservice
(참고로 루트가 아닌 사용자로 실행). 바라보다이것사용자 서비스 파일에 대한 추가 정보.