デスクトップエントリはサービスを停止し、アプリケーションを起動し、アプリケーションが閉じたときにサービスを再起動します。

デスクトップエントリはサービスを停止し、アプリケーションを起動し、アプリケーションが閉じたときにサービスを再起動します。

デフォルトでは、カメラを開き、ビデオストリームでいくつかのタスクを実行するアプリケーション(OSはUbuntu 16.04)があります。システムサービスによって管理されます。

[Unit]
Description=My Application
After=network.target
StartLimitInterval=0

[Service]
Type=simple
Restart=always
RestartSec=5
User=myuser
WorkingDirectory=/opt/foo/
ExecStart=/opt/foo/myapplication

[Install]
WantedBy=multi-user.target

その後、デスクトップエントリがあり、サービスを停止し、パラメータを使用してアプリケーションを再実行できます。

[Desktop Entry]
Name=Myapp
Type=Application
Exec=/opt/foo/launcher.sh
Terminal=true
Path=/opt/foo/
Categories=None;

これは私のランチャーです:

#!/bin/bash
service myservice stop
/opt/foo/myapplication --debug

この方法は機能しますが、デスクトップエントリで起動されたアプリケーションを閉じるとサービスを再起動する方法が見つかりません。ランチャーの終了時にサービスの再起動を追加しようとしましたが、アプリケーションが実行されている端末を閉じると、思ったことはすべて終了するため、機能しません。どうすればいいですか?

ベストアンサー1

以下のユニットファイルを作成できます/etc/systemd/system/myprocess.service

[Unit]
Description=My Process

[Service]
ExecStart=/bin/myprocess
Restart=always

[Install]
WantedBy=multi-user.target

次に、デスクトップポータルでランチャーを作成して実行します。

systemctl start myprocess.service

ただし、実行可能エントリから手動で起動できるように、起動時にサービスを有効にしないでください。
編集する:
デバッグモードでも実行する必要がある場合は、--debugこのパラメーターを使用して別のサービスユニットを作成する必要があります。次のスクリプトを指す別のデスクトップアイテムを作成できます(代表的なアイデアのみ)。

systemctl stop myprocess.service // to stop previous service
systemctl start processwithdebug.servce // to debug

おすすめ記事