나는 이 systemctl 작업을 만들었습니다.
[Unit]
Description=Evercam Media
After=network.target
[Service]
Type=forking
User=root
Group=root
WorkingDirectory=/opt/evercam_media
ExecStart=/opt/evercam_media/bin/evercam_media start
ExecStop=/opt/evercam_media/bin/evercam_media stop
Restart=always
RestartSec=5
Environment=LANG=en_US.UTF-8
SyslogIdentifier=evercam_media
[Install]
WantedBy=multi-user.target
작동하길 원하므로 완벽하게 작동하지만 시작 및 중지 시 일부 로그를 표시하고 싶습니다. 왜냐하면 시작 작업을 시작하거나 중지하면 작업이 중지되었거나 대기 중이라는 것을 표시하지만 아무것도 표시되지 않기 때문입니다. 추가할 수 있습니까? "시작됨" 또는 "중지됨"과 같은 일부 로그가 있습니까?
또, 내가 하고 있는 일의 진행 상황을 보면 systemctl status evercam_media.service
이렇게 말해준다.
● evercam_media.service - Evercam Media
Loaded: loaded (/etc/systemd/system/evercam_media.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Tue 2017-11-07 10:53:40 CET; 1h 3min ago
Process: 25830 ExecStop=/opt/evercam_media/bin/evercam_media stop (code=exited, status=0/SUCCESS)
Process: 25692 ExecStart=/opt/evercam_media/bin/evercam_media start (code=exited, status=0/SUCCESS)
Main PID: 25728 (code=exited, status=1/FAILURE)
활성: 실패? ?
왜 실패하지 않고 중지되었다고 말하지 않습니까? 어떤 도움이라도 대단히 감사하겠습니다. 감사합니다.
답변1
systemd 장치는 비동기 명령을 위해 설정되고 Type=forking
사용 됩니다.ExecStop=
이는 systemd가 직후에 기본 프로세스를 종료한다는 것을 의미합니다.
/opt/evercam_media/bin/evercam_media 중지그만두다.
Restart=always
대신 사용 됩니다 Restart=on-failure
.
에 명시된 바와 같이문서:
일반적으로 서비스 종료만 필요하고(예: 종료 신호 형식을 대기열에 추가) 서비스가 종료될 때까지 기다리지 않는 이 설정에 대한 명령을 지정하는 것만으로는 충분하지 않습니다. 위에서 설명한 대로 명령이 종료된 직후 서비스의 나머지 프로세스가 종료되므로 완전히 중지되지 않을 수 있습니다
KillMode=
.KillSignal=
따라서 지정된 명령은 비동기 작업이 아닌 동기 작업이어야 합니다.
이 문제를 해결하기 위해 수행할 수 있는 작업에는 여러 가지가 있습니다. 1을 TimeoutSec=
반환하지 않는 종료 신호를 사용 하거나 동기화 evercam_media
하는 방법을 찾으십시오 ExecStop=
.
로그 메시지의 경우 자세한 내용은 플래그를 참조하세요 evercam_media
.