root権限ではなくて,一般ユーザ権限で systemd のサービスを登録&稼働させる方法です
サービスの登録
systemdのサービスは「ユニットファイル」と呼ばれる設定ファイルに記述します.
ユーザ権限で起動するサービスは ~/.config/systemd/user/ ディレクトリ以下にユニットファイルを配置します.
例えばサービス名を myjob とすると,ユニットファイルのファイル名は ~/.config/systemd/user/myjob.service となります.
ユニットファイルの雛形
ユニットファイルの雛形です.
[Unit] Description=my job service [Service] ExecStart=起動コマンド ExecStop=/bin/kill ${MAINPID} Restart=always [Install] WantedBy=default.target
ポイントは
- 起動コマンドは ExecStartで指定
- 終了コマンドは ExecStopで指定
- WantedBy=default.target を必ずつけること
例えば python で記述されたスクリプトを systemd経由で起動したい場合は例えば
ExecStart=/usr/bin/python3 /path/to/filename.py --start --verbose
という風に書けばOKです
上記の雛形ではサービス停止時は kill コマンドでプロセスをkillするように書いてあります.
こちらも例えば
ExecStop=/usr/bin/python3 /path/to/filename.py --stop
という感じで任意のコマンドが指定できます
より詳しい説明が必要な場合は以下のドキュメントを読むのが良いと思います.
- systemd/User - ArchWiki (英語版)
- systemd/ユーザー - ArchWiki (日本語版)
サービスの登録
サービスの有効化
$ systemctl --user enable myjob
状態確認
$ systemctl --user status myjob
サービス手動起動
$ systemctl --user start myjob
サービス手動停止
$ systemctl --user stop myjob
サービス再起動
$ systemctl --user restart myjob
ログの確認
$ journalctl --user
$ journalctl --user -u myjob