서비스를 종료하려면 systemd에 특정 신호를 보냅니다.

서비스를 종료하려면 systemd에 특정 신호를 보냅니다.

원격 서버가 있고 브라우저를 통해 연결합니다.목성거기에 호스팅된 노트북입니다. jupyter 서비스는 를 통해 실행됩니다 systemd. 문제는 jupyter가 기대한다는 것입니다 ctrl-c5초 이내에 서로 명령을 내려 깔끔하게 종료하세요. systemd프로세스를 중지하라는 신호를 보낸 다음 시간 초과를 기다린 후 마지막으로 jupyter가 중지되지 않은 것을 확인하면 종료 신호를 보냅니다. 이로 인해 서비스를 중지하거나 다시 시작하려고 할 때 오랜 지연과 불결한 종료가 발생합니다. systemd에 매개변수가 있다는 것을 알고 있지만 이를 실제로 사용하는 방법과 이 메커니즘을 통해 두 번의 키 입력에 해당하는 신호를 보내는 ExecStop방법에 대한 예를 찾을 수 없습니다 .ctrl-c

내 현재 서비스 파일은 다음과 같습니다

[Unit]
    Description=Jupyter notebook

[Service]
    Type=simple
    PIDFile=/var/run/jupyter-notebook.pid
    ExecStart=/home/linuxbrew/.linuxbrew/bin/jupyter notebook --no-browser
    User=pgcudahy
    Group=pgcudahy
    WorkingDirectory=/home/pgcudahy
    Environment=PATH=/home/linuxbrew/.linuxbrew/opt/python/libexec/bin:/home/linuxbrew/.linuxbrew/opt/cython/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/pgcudahy/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

[Install]
    WantedBy=multi-user.target

답변1

그래서 더 많은 연구를 통해 보내드리고 싶은 ctrl-c것은 다음을 SIGINT사용하여 수행할 수 있는 것 입니다./bin/kill -s SIGINT

이것을 내 서비스 파일에 추가하면 jupyter가 완전히 종료됩니다.

ExecStop=/bin/kill -s SIGINT -$MAINPID & /bin/kill -s SIGINT -$MAINPID

전체 파일은

[Unit]
    Description=Jupyter notebook

[Service]
    Type=simple
    PIDFile=/var/run/jupyter-notebook.pid
    ExecStart=/home/linuxbrew/.linuxbrew/bin/jupyter notebook --no-browser
    ExecStop=/bin/kill -s SIGINT -$MAINPID & /bin/kill -s SIGINT -$MAINPID
    User=pgcudahy
    Group=pgcudahy
    WorkingDirectory=/home/pgcudahy
    Environment=PATH=/home/linuxbrew/.linuxbrew/opt/python/libexec/bin:/home/linuxbrew/.linuxbrew/opt/cython/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/pgcudahy/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

[Install]
    WantedBy=multi-user.target

답변2

나에게 이것은 "some_systemd.service" 파일에 다음 코드를 추가하여 작동했습니다.

[Service]
ExecStart=/usr/local/sbin/DVR_Living_Room.sh
KillSignal=SIGINT

"SIGINT"는 종료 신호로, "Ctrl + C"로 해석되며 깔끔하게 종료됩니다.

FFMPEG 라이브 녹화 중 다른 종류의 종료로 인해 비디오가 손상되기 때문에 이 FFMPEG 신호가 필요합니다. FFMPEG는 비디오를 손상시키지 않고 비디오 녹화를 완전히 중지하기 위한 유효한 종료로 "CTRL+C"만 허용합니다.

또한 여기에서 다양한 종료 신호를 찾을 수 있습니다. https://man7.org/linux/man-pages/man7/signal.7.html

관련 정보