web-dev-qa-db-ja.com

ブート時に/ var / runの下にディレクトリを作成します

デーモンのユーザーに書き込み権限が付与されたPIDファイル用に、/var/runに独自のディレクトリを必要とするデーモンがありました。

私はこれらのコマンドでこのディレクトリを作成できることがわかりました:

# mkdir /var/run/mydaemon

次に、その所有権を、プロセスを実行したいユーザー/グループに変更できます。

# chown myuser:myuser /var/run/mydaemon

しかし、リブートを発行するたびに、このディレクトリはなくなります。マシンが起動するたびにこのディレクトリを作成するにはどうすればよいですか?

44
user24601

Systemdにディレクトリを作成させる2つの代替方法は、通常、サービスのユニットファイルでRuntimeDirectoryを宣言するのが最も簡単です。

RuntimeDirectory=, RuntimeDirectoryMode= ディレクトリ名のリストを取得します。設定すると、指定した名前の1つ以上のディレクトリが、ユニットの起動時に/run(システムサービスの場合)または$ XDG_RUNTIME_DIR(ユーザーサービスの場合)の下に作成され、ユニットの停止時に削除されます。ディレクトリには、RuntimeDirectoryMode=で指定されたアクセスモードがあり、User=Group=で指定されたユーザーとグループが所有します。これを使用して、ユニットの1つ以上のランタイムディレクトリを管理し、それらのライフタイムをデーモンランタイムにバインドします。指定するディレクトリ名は相対である必要があり、「/"、つまり、作成または削除する単純なディレクトリを参照する必要があります。これは、特権がないために/ runにランタイムディレクトリを作成できない非特権デーモンにとって、およびランタイムディレクトリが使用後に自動的にクリーンアップされることを確認するのに特に役立ちます。

または、より複雑な、または異なる構成またはライフタイム保証が必要なランタイムディレクトリの場合は、 tmpfiles.d を使用して、パッケージにファイル/usr/lib/tmpfiles.d/mydaemon.confをドロップさせます。

 #Type Path            Mode UID      GID    Age Argument
 d     /run/mydaemon   0755 myuser myuser   -   -
63
HBruijn

最初にディレクトリを作成するサービスを作成しました。

vim /etc/systemd/system/mydaemon-helper.service

/etc/systemd/system/mydaemon-helper.serviceの内容:

[Unit]
Description=MyDaemon Helper Simple Service
After=network.target

[Service]
Type=simple
ExecStartPre=-/usr/bin/mkdir /var/run/mydaemon
ExecStart=/usr/bin/chown myuser:myuser /var/run/mydaemon
Restart=on-abort


[Install]
WantedBy=multi-user.target

それから私はこのサービスを始めました:

systemctl start mydaemon-helper

systemctl status mydaemon-helper

出力:

[root@alpha etc]# systemctl status mydaemon-helper.service
● mydaemon-helper.service - MyDaemon Helper Simple Service
   Loaded: loaded (/etc/systemd/system/mydaemon-helper.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

May 28 20:53:50 alpha systemd[1]: Starting MyDaemon Helper Simple Service...
May 28 20:53:50 alpha systemd[1]: Started MyDaemon Helper Simple Service.

最後に、起動時にそれをロードするようにシステムに指示しました。

systemctl enable mydaemon-helper

5
user24601