それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ユーザー毎の systemd を使ってシステム全体設定と個人用設定を分ける。

systemd のユーザーごとの設定というのがあります。

systemd は sudo 権限がないと動かないと思ってませんか。 タイマーや自動起動インスタンスやサービスはもう、ユーザー空間でできるのです。

ユーザーモードでの systemd というのがあります。

引数 --user でユーザーモード

systemd 関連のコマンドに引数の ---user をつけると、ユーザー空間での、ユーザーに固有の systemd 空間を扱えます。

自分自身でログインしているときに、自分のsystemd 関連サービスのステータスを表示するには次のようにします。

takuya@:~$ systemctl  --user status 

f:id:takuya_1st:20190809001329p:plain

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 作業と同じです。

f:id:takuya_1st:20190809002950p:plain

ね?簡単でしょ。もう sudo 権限なんてもらわなくても簡単に自分でDaemon起動ができるんですよ。

LXDやLXCがり、snap があり、ユーザー空間を切り離している今の時代のLinuxには、非常に心地よいsystemd ではないでしょうか。

いつ実行されるのか

ユーザーがログインしたときです。最初のログインで実行されます。複数ログインしてログインする際ではなく、システムが起動してから最初のログインです。

ログアウトしたら終了される?

されません。ログアウトしても動作してます。 user のログイン session とは切り離されているので。環境変数も渡されないっっていうのと同じでしょうね。

起動時にならないの?

起動時に、指定ユーザーの systemd を全部ロードするには

sudo loginctl enable-linger username

これで、起動時に指定したユーザーのsysd が実行できますが、起動時に実行するのであれば、もうsudo で /etc/systemd に書くよね。

使いようによっては便利だと思います。

ubuntu デスクトップなどを利用しているときのログイン時に実行などするものを、ある程度こちらに持ってこれます。

参考資料

systemd/ユーザー - ArchWiki