systemd のユーザーごとの設定というのがあります。
systemd は sudo 権限がないと動かないと思ってませんか。 タイマーや自動起動、インスタンスやサービスはもう、ユーザー空間でできるのです。
ユーザーモードでの systemd というのがあります。
引数 --user でユーザーモード
systemd 関連のコマンドに引数の ---user
をつけると、ユーザー空間での、ユーザーに固有の systemd 空間を扱えます。
自分自身でログインしているときに、自分のsystemd 関連サービスのステータスを表示するには次のようにします。
takuya@:~$ systemctl --user status
systemd サービスの作成
サービスの作成は簡単です。通常の systemd となんら違いはありませんでした。
systemd のサービスは、 ~/.config/systemd/user/
に設置する。記述方法は、通常のsystemd となんらかわりがありません。
簡単に言えば、作るファイルの場所がいつもと異なるだけ、root権限がいらない。自分権限で完結している。
ユーザー毎のsystemd のサービスを作ってみる。
それでは、試しに、自分だけのサービスを作ってみたいと思います。
最初に、ディレクトリを準備します。
mkdir -p ~/.config/systemd/user/
つぎに、service ファイルを作成したいと思います。
touch ~/.config/systemd/user/my-loop.service
ファイルの中身を記述します。
takuya@:~$ cat - > ~/.config/systemd/user/my-loop.service [Unit] Description=サービスを作成する練習。 [Service] ExecStart=bash -c 'while : ; do echo 1 ; sleep 1 ;done ' [Install] WantedBy=default.target
有効化します。
takuya@:~$ systemctl --user enable my-loop.service Created symlink /home/takuya/.config/systemd/user/default.target.wants/my-loop.service → /home/takuya/.config/systemd/user/my-loop.service.
起動します。
起動方法は、通常作業で sudo 作業と同じです。
ね?簡単でしょ。もう sudo 権限なんてもらわなくても簡単に自分でDaemon起動ができるんですよ。
LXDやLXCがり、snap があり、ユーザー空間を切り離している今の時代のLinuxには、非常に心地よいsystemd ではないでしょうか。
いつ実行されるのか
ユーザーがログインしたときです。最初のログインで実行されます。複数ログインしてログインする際ではなく、システムが起動してから最初のログインです。
ログアウトしたら終了される?
されません。ログアウトしても動作してます。 user のログイン session とは切り離されているので。環境変数も渡されないっっていうのと同じでしょうね。
起動時にならないの?
起動時に、指定ユーザーの systemd を全部ロードするには
sudo loginctl enable-linger username
これで、起動時に指定したユーザーのsysd が実行できますが、起動時に実行するのであれば、もうsudo で /etc/systemd に書くよね。
使いようによっては便利だと思います。
ubuntu デスクトップなどを利用しているときのログイン時に実行などするものを、ある程度こちらに持ってこれます。