nfancurve.service
ログインするたびにユーザーサービスを実行したいです。以前は、コマンドを使用してサービスを有効にしていましたが、systemctl --user enable nfancurve.service
新しいセッション(再起動を含む)を開始するたびにサービスがアクティブになっても実行されませんでした。ログイン後、次のコマンドを実行してこれを確認しました。
name@machine:~$ systemctl --user is-active nfancurve.service
inactive
name@machine:~$ systemctl --user is-enabled nfancurve.service
enabled
name@machine:~$ systemctl --user start nfancurve.service
name@machine:~$ systemctl --user is-active nfancurve.service
active
以下はステータスログですsystemctl --user status nfancurve.service
。
● nfancurve.service - Nfancurve service
Loaded: loaded (/usr/lib/systemd/user/nfancurve.service; enabled; vendor preset: enabled)
Active: inactive (dead)
完全な情報を得るために、このサービスは以下で提供されます。このリポジトリ、AURからインストールしました。ファイル.service
は次のとおりです。
[Unit]
Description=Nfancurve service
After=graphical-session.target
Requires=graphical-session.target
[Service]
ExecStart=/bin/sh /usr/bin/nfancurve -c /etc/nfancurve.conf
KillSignal=SIGINT
[Install]
WantedBy=graphical-session.target
最後の行を次に変更してみましたが、再WantedBy=default.target
起動してログインしてもサービスはまだ起動しません。私のデスクトップ環境はxfceですgraphical-session.target
。
ログインするたびに自動的に起動するにはどうすればよいですか?
答え1
長すぎます。
に変更WantedBy=graphical-session.target
。WantedBy=default.target
仮説
[Install]
あなたの問題はサービスファイルセクションにあると思います。システムデバイスの場合はmulti-user.target
インストールによっては問題ありませんが、ユーザーデバイスの場合は同等のインストールですdefault.target
。よりsystemd.special(7) マンページもっと学ぶ。
| system target | near-equivalent user target |
|-------------------|-----------------------------|
| multi-user.target | default.target |
| graphical.target | graphical-session.target |
興味がある他の目標はまたgraphical-session-pre.target
はですxdg-desktop-autostart.target
。
基本.targetMVCE
以下は、Debian 11システムで試したばかりの最小限の例です。
サービスファイル:
$ systemctl --user cat simpleuser.service
# /home/stew/.config/systemd/user/simpleuser.service
[Unit]
Description=Simple User Service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/true
[Install]
WantedBy=default.target
私はそれをインストールした:
$ systemctl --user enable simpleuser.service
Created symlink /home/stew/.config/systemd/user/default.target.wants/simpleuser.service → /home/stew/.config/systemd/user/simpleuser.service.
再起動すると、サービスが有効になっていることがわかります。
$ systemctl --user status simpleuser.service
● simpleuser.service - Simple User Service
Loaded: loaded (/home/stew/.config/systemd/user/simpleuser.service; enabled; vendor preset: enable>
Active: active (exited) since Sun 2020-07-12 10:12:54 CEST; 13min left
Process: 1127 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 1127 (code=exited, status=0/SUCCESS)
Jul 12 10:12:54 stewbian systemd[1106]: Starting Simple User Service...
Jul 12 10:12:54 stewbian systemd[1106]: Finished Simple User Service.
サブステータスを知りたい場合は、次のようなものを(exited)
使用して取得できます。Type=simple
ExecStart=/bin/sleep infinity
(running)
グラフィックセッション目標の質問
バグレポートであなたの問題を発見しました。羽ハブから。
graphic-session.target ベースでインストールした場合、起動しないことがあります。私はこれをKDE / i3設定で実行し、デフォルトのGnome3設定で再現しました。
$ systemctl --user status graphical-session.target
● graphical-session.target - Current graphical user session
Loaded: loaded (/usr/lib/systemd/user/graphical-session.target; static; vendor preset: disabled)
Active: inactive (dead)
Docs: man:systemd.special(7)
DEが意図したとおり、実際にこれを達成できないようです。この場合はを使用してくださいWantedBy=default.target
。あなたのスクリプトはGUIベースのようには見えないのでdefault.target
大丈夫でしょう。それ以外の場合は、セクションAfter=graphical.target
で使用することを検討できます[Unit]
。
~によるとsystemd.special(7) マンページ、DE(例)でgraphical-session.target
なければなりません。このようにGnomeが起動すると、graphic-session.targetが発生します。 dbus オブジェクトを調べてみると、これを発生させる対象とは何の関係もないことがはっきりわかります。BoundBy=
{gnome,kde,xfce}-session.target
$ busctl introspect --user org.freedesktop.systemd1 \
/org/freedesktop/systemd1/unit/graphical_2dsession_2etarget \
org.freedesktop.systemd1.Unit
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
.ActiveState property s "inactive" emits-change
.After property as 2 "simpleuser.service" "basic.target" const
.Before property as 1 "shutdown.target" const
.BindsTo property as 0 const
.BoundBy property as 0 const
.Conflicts property as 1 "shutdown.target" const
.ConsistsOf property as 2 "gnome-terminal-server.service" "duns… const
.Description property s "Current graphical user session" const
.Documentation property as 1 "man:systemd.special(7)" const
.LoadState property s "loaded" const
.Names property as 1 "graphical-session.target" const
.PartOf property as 0 const
.RequiredBy property as 0 const
.Requires property as 1 "basic.target" const
.SubState property s "dead" emits-change
.UnitFilePreset property s "disabled" -
.UnitFileState property s "static" -
.WantedBy property as 0 const
.Wants property as 1 "simpleuser.service" const
私はメーリングリストを調べた結果、{gnome,kde,xfce}-session.target
この提案がわずか4年前にgnome、kde、およびxfceでこれらの*.target
ファイルを送信するように作成されたことがわかりました。このようなことはまだ起こっていません。したがって、記録があっても不完全です。したがって、まだ使用しないでくださいgraphical-session.target
。
答え2
ついに解決策を見つけました(Stuartと他の人に感謝します)。元のサービスファイルを変更しました。
[Unit]
Description=Nfancurve service
After=graphical-session.target
Requires=graphical-session.target
[Service]
ExecStart=/bin/sh /usr/bin/nfancurve -c /etc/nfancurve.conf
KillSignal=SIGINT
[Install]
WantedBy=graphical-session.target
Requires行を削除し、by(および行を含む)のgraphical-session.target
すべてのインスタンスを置き換えます。その結果、現在のサービスファイルが生成されます。default.target
After
WantedBy
[Unit]
Description=Nfancurve service
After=default.target
[Service]
ExecStart=/bin/sh /usr/bin/nfancurve -c /etc/nfancurve.conf
KillSignal=SIGINT
[Install]
WantedBy=default.target
コンピュータを起動してログインすると、サービスが有効になります。
答え3
.service ファイルは次のようにする必要があります。
[Unit]
Description=Spark service
[Service]
ExecStart=/path/to/spark/sbin/start-all.sh
[Install]
WantedBy=multi-user.target
.serviceファイルを有効にして使用するには、さらにいくつかの手順を実行してください。
- myfirst.serviceという名前で/etc/systemd/systemフォルダに入れます。
- スクリプトが実行可能であることを確認してください。
chmod u+x /path/to/spark/sbin/start-all.sh
- 始めましょう:
sudo systemctl start myfirst
- 起動時に実行するように設定します。
sudo systemctl enable myfirst
- 停止する:
sudo systemctl stop myfirst