サービスを終了するには、systemdに特定の信号を送信します。

サービスを終了するには、systemdに特定の信号を送信します。

リモートサーバーがあり、ブラウザを介して接続します。木星そこにホストされているノートブック。 jupyterサービスはを介して実行されますsystemd。問題はjupyterが期待していることです二つ ctrl-c5秒以内にお互いに命令を出して、きちんと終了してください。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

おすすめ記事