web-dev-qa-db-ja.com

基本的なsystemdサービスファイルの作成

ユーザーがlocalhostのHTTPを介して対話するNodejsアプリケーションを開発しています。実質的にパラメータはなく、デーモンには実質的に依存関係がなく、ログイン時に起動する必要があるだけです。

起動スクリプトについては、各プラットフォームのイディオムをフォローしたいと思います。つまり、UbuntuではUpstart、Fedoraではsystemdです。

  • systemdシステムファイルを書き込むための適切なチュートリアルはありますか?
  • 知っておくべき「ベストプラクティス」はありますか?

私はこれらのリソースを見つけました:

私は主に、リファレンスとしてのAPIと、従うべき基本的なフォーマットを探しています。

106
beatgammit

Systemdマニュアルページ から始めます。これらは、システムとサービスの包括的なリソースを表します。

freedesktop Systemd FAQs もあります。

26
jasonwryan

次の例は、このリンクから発想を得たものであり、実際にはすべてのステップについて言及しているわけではなく、ソースを信用するためにのみリストされています。 http://patrakov.blogspot.com/2011/01/writing-systemd-service-files .html

ステップ1:基本的に、拡張引数を使用してbashプロセスを起動するこのファイル(場所をメモ)を作成しました。 bashとは異なる独自のコマンドを実行できます。

[root@y500-Fedora ~]# cat /etc/systemd/system/foo.service 
[Unit]
Description=foo

[Service]
ExecStart=/bin/bash -c "while true; do /bin/inotifywait -qq --event close_write /sys/class/backlight/acpi_video0/brightness; su myusername -c '/bin/xbacklight -display :0 -set $(cat /sys/class/backlight/acpi_video0/brightness)'; done"

[Install]
WantedBy=multi-user.target

ステップ2

再ロードsystemd

systemctl daemon-reload

新しいサービスを開始します。

systemctl enable foo

(同様にdisableできます)

(オプション)ステップ3:マルチユーザーモード(実行レベル3)への次の再起動時に自動的に開始されますが、すぐに開始したい場合:

systemctl start foo
systemctl status foo # optional, just to verify

更新:完全を期すために、ubuntu bionicには非常に完全なmanページがあるように見えることを付け加えておきます。 RTFMはここ

184
necromancer
4
caracal