特定のユーザーとしてログインしている間に存在するいくつかのバックグラウンドプロセスを実行する必要があります。
ユーザー固有のデーモンのようなものがありますか?私はコンピュータの起動から終了(または手動の起動/終了)までのグローバルデーモンについてのみ知っています。
これでプロセスがすでに存在することを確認し、存在しない場合は生成するスクリプトを作成しました。それからnohup
私のものを使用してください.profile
。これにより、プロセスが開始時に開始され、一度だけ開始されます(複数のrxvt
用語が来て消えても)。ただし、ログインした後は決して終了しません(災害ではありませんが、プロセスを終了する方がきれいになります)。
答え1
systemdを使用すると、ユーザーは自分のsystemdインスタンスを実行してプライベートデーモンを管理できます。
systemd --user
すでにsystemdがインストールされている場合は、実行してサービスを開始して管理するだけですsystemctl --user
。ユーザーサービスはで検索されます~/.config/systemd/user
。
デフォルトでは、systemdはログアウト時にユーザーサービスを終了します(要求に応じて)。この動作は、このコマンドを使用してユーザーの煙を有効にすることで変更できますloginctl --enable-linger $USER
。
詳細は以下で確認できます。建築wikiページ。
答え2
dbusサービスはまさにこの目的に使用されます。まあ、この目的に使用することができます :-)。ユーザー固有のdbusデーモンは、ユーザーがデスクトップ環境にログインすると開始され、ユーザーがログアウトすると終了します(マンページdbus-launch
とオプションを参照--exit-with-session
)。 dbusサービスは、dbusインスタンスで起動したり、dbusを介してサービスのインタフェースが最初に呼び出されたときに開始できます。各ユーザーは、ユーザーのホームディレクトリの隠しディレクトリに定義されているか、またはグローバルに定義された独自のdbusサービス仕様を持つことができます/etc
。freedesktopのdbusホームページ広範な文書と参照の実装。
最近はDebianベースのディストリビューションのみを使用しています。これらのスクリプトには、/etc/X11/Xsession.d
選択したデスクトップ環境を起動するコマンドで最終的に評価される文字列を頻繁に変更するスクリプトがあります。 dbusには、コマンドの前にdbusラッパーを追加するスクリプトがありますdbus-launch
。このラッパーはdbusサーバーを起動し、少なくともバニラDebian(「すべてのDebianベースのディストリビューションで」と言いたい)dbus-launch
オプションを提供します--exit-with-session
。
ユーザーがdbusサービスにログインしたときに実行したいプロセスをラップできる必要があり、IIRC dbusは終了する前にそのサービスを自動的に終了します。
答え3
BASHをシェルとして使用している場合は、〜/ .bash_logoutでいくつかの検出を試み、実行中のプロセスを閉じることができます。
長期的にあなたが探しているのは、おそらくこのようなインターフェース(D-Bus経由など)です。コンソールツールキットまたは体系的にログインしました。