systemdでユーザー固有のunitを動かす

systemdは~/.config/systemd/userにserviceファイルを置くことで、そのユーザー用のinit時の処理を動かすことができるんですね。基本的に使い方は通常と同じで、唯一違うのは--userをパラメータとして使用すること。詳細はArch Wikiを見ましょう。

このようにserviceファイルを書いたとして、

masami@kerntest:~$ cat ~/.config/systemd/user/foobar.service 
[Unit]
Description=User's service file

[Service]
Type=oneshot
ExecStart=/usr/bin/touch /tmp/test.txt
RemainAfterExit=yes

[Install]
WantedBy=default.target

このように実行します。

masami@kerntest:~$ systemctl --user enable foobar
Created symlink from /home/masami/.config/systemd/user/default.target.wants/foobar.service to /home/masami/.config/systemd/user/foobar.service.

再起動してstatusを確認するとちゃんと動作したのがわかります。

masami@kerntest:~$ systemctl --user status foobar
● foobar.service - User's service file
   Loaded: loaded (/home/masami/.config/systemd/user/foobar.service; enabled; vendor preset: enabled)
   Active: active (exited) since Thu 2016-05-05 11:32:14 JST; 25s ago
  Process: 342 ExecStart=/usr/bin/touch /tmp/test.txt (code=exited, status=0/SUCCESS)
 Main PID: 342 (code=exited, status=0/SUCCESS)

May 05 11:32:14 kerntest systemd[336]: Starting User's service file...
May 05 11:32:14 kerntest systemd[336]: Started User's service file.

ちなみに--userを付けないと~/config/systemd/userを見ないので、そんなサービスは無いって怒られます。

masami@kerntest:~$ systemctl  status foobar
● foobar.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

これは良いですね。

Amazon Web Services クラウドネイティブ・アプリケーション開発技法 一番大切な知識と技術が身につく

Amazon Web Services クラウドネイティブ・アプリケーション開発技法 一番大切な知識と技術が身につく