個人用systemd

提供: Hideki Saito Wiki Japanese
移動先: 案内検索

systemdは各ユーザーごとにユーザープロセス[1]として立ち上げられているのでログイン時の起動などオートメーションに使用することができる。

特徴

  • セッションごとではなくユーザーごと。複数のログインにおいて複数のsystemdが立ち上がるわけではない。
  • 各ユーザーが指定する独自の定義は~/.config/systemd/userに入れる。
  • 個人用systemdのインスタンスはsystemd --userでシステムのものと同じように管理できる。[2]
  • もちろんcgroupsに格納されるので各種のリソース制限などを利用することができる。[3]
  • 再起動時など、プロセスが終了される場合、適切な終了プロセスを踏んだ上で処理できる。

Syncthing

Syncthingを立ち上げる場合。

[Unit]
Description=Syncthing Personal Filesharing Cloud

[Service]
Type=simple
ExecStart=/your/path/to/syncthing
KillSignal=SIGINT
TimeoutSec=45
Restart=always

# Hardening
PrivateTmp=yes

[Install]
WantedBy=default.target

Freenet

Freenetを立ち上げる場合。

[Unit]
Description=Freenet -- The Free Network
After=network.target

[Service]
Type=forking
ExecStart=/your/path/to/run.sh start
ExecStop=/your/path/to/run.sh stop
ExecReload=/your/path/to/run.sh restart
KillSignal=SIGINT
TimeoutSec=45
Restart=on-failure

# Hardening
PrivateTmp=yes

[Install]
WantedBy=default.target

Jupyter

Jupyterを立ち上げる場合。前提としてconda経由でプライベートな環境を切ってある。 /full/path/to/personal_envを設定した環境に変更。

WorkingDirectoryはノートブックを格納してある場所に設定。こうするとその場所のみが再帰的にアクセス可能な場所になる。

[Unit]
Description=Jupyter Notebook
After=graphical.target

[Service]
Type=simple
ExecStart=/full/path/to/personal_env/bin/jupyter notebook
WorkingDirectory=/full/path/to/notebooks
TimeoutSec=60
Restart=on-failure

# Hardening
PrivateTmp=yes

[Install]
WantedBy=multi-user.target

脚注

  1. systemd --userとなる。
  2. システム全体のものと比較するとroot権限がいらないという利点があるが、その分当該ユーザーが可能な行動に制限される。
  3. もともとsystemdはinitを代わりとしてシステム全体のプロセスを管理しているものであり、実は個人用systemdを介さずとも全てのプロセスはsystemdから派生したプロセスであるが、設定ファイルの定義により、より自由度の高い、緻密な管理が行える。尚、個人用のsystemdも例外ではなく、systemdから派生するプロセスである。