リモートサーバーがあり、ブラウザを介して接続します。木星そこにホストされているノートブック。 jupyterサービスはを介して実行されますsystemd
。問題はjupyterが期待していることです二つ ctrl-c
5秒以内にお互いに命令を出して、きちんと終了してください。systemd
プロセスを停止するようにシグナルを送信し、タイムアウトを待ってから最後に jupyter が停止していないことを確認すると、終了シグナルを送信します。これにより、サービスを停止または再起動しようとすると、長い遅延と不完全なシャットダウンが発生します。 systemdにパラメータがあることはわかっていますが、それを実際に使用する方法と、このメカニズムを介して2つのキーストロークに対応する信号を送信する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