Systemd는 시작 시 서비스에 종료 신호를 보냅니다.

Systemd는 시작 시 서비스에 종료 신호를 보냅니다.

이것은 우분투 16.04의 시스템 서비스입니다.

[Unit]
Description=Starts Caspar CG

[Service]
Type=forking
WorkingDirectory=/home/broadcastingza/CasparCG/Server
Environment=DISPLAY=:0
ExecStart=/bin/sh ./run.sh --watch
StandardOutput=null
Restart=on-failure

[Install]
WantedBy=multi-user.target graphical.target

편집: 이것은 sudo systemctl status -l의 출력입니다.

sudo systemctl status start-caspar.service -l
● start-caspar.service - Starts Caspar CG
       Loaded: loaded (/etc/systemd/system/start-caspar.service; enabled; vendor preset: enabled)
       Active: inactive (dead) since Tue 2017-03-21 17:04:28 SAST; 1 day 16h ago
Process: 5198 ExecStart=/bin/bash -c ./run.sh --watch (code=exited, status=0/SUCCESS)

Mar 21 17:04:14 ZAPS001 systemd[1]: Starting Starts Caspar CG...
Mar 21 17:04:28 ZAPS001 systemd[1]: Started Starts Caspar CG.

서비스가 활성화되어 있고 정상적으로 실행 중입니다. 수동 시작도 문제가 되지 않습니다. 내가 가진 유일한 문제는 쉘 스크립트가 실행되면("run.sh"), 시작되는 서버가 EXIT 신호를 받고 EXIT 코드 0으로 종료된다는 것입니다. 이는 서버가 콘솔을 항상 열어두도록 요구하는 것과 거의 같습니다.

콘솔에서 똑같은 스크립트를 실행하면 정상적으로 실행됩니다.

콘솔을 즉시 종료하지 않고 서비스를 시작하는 방법이 있습니까, 아니면 콘솔과 독립적으로 먼저 서비스를 시작하는 방법이 있습니까?

답변1

모두에게 사과드립니다. 이는 헤드리스(casparcg)를 실행하려는 바이너리에서 알려진 문제인 것 같습니다. 바라보다:https://github.com/CasparCG/Server/issues/529

제안된 해결 방법은 분리 모드에서 터미널을 실행하기 위해 screen(또는 tmux)을 설치하는 것입니다. 화면을 사용하여 작동하도록 만들었습니다.

  1. 설치 화면:

    sudo apt install screen

  2. 다음은 설치 후 systemd 서비스에 사용되는 코드 줄입니다.

    screen -d -m /path/to/your/script.sh

-d는 터미널을 분리하고, -m은 $STY를 무시합니다.

  1. 그에 따라 systemd 서비스를 조정하십시오.

    [Unit]
    Description=Starts Caspar CG

    [Service]
    Type=forking
    Environment=DISPLAY=:0
    StandardOutput=null
    ExecStart=/bin/sh -c "screen -d -m /usr/bin/start_caspar.sh" --watch
    Restart=on-failure
    User=broadcastingza

    [Install]
    WantedBy=multi-user.target graphical.target

이제 서버를 분리하여 실행할 수 있습니다.

도와주셔서 감사합니다!

관련 정보