個人用systemd
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