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


39

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

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

# mkdir /var/run/mydaemon

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

# chown myuser:myuser /var/run/mydaemon

しかし、このディレクトリは、リブートするたびに消えてしまいます!マシンが起動するたびにこのディレクトリを作成するにはどうすればよいですか?

回答:


56

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   -   -

実際のデーモンはを使用し、systemd-sysv-generatorその週に十分な学習曲線があったため、後者を使用しました。その1つの.confファイルとその1行だけです。今は
気分が

私はすでに後者を定義して/usr/lib/tmpfiles.d/php7.3-fpm.confおり/usr/lib/tmpfiles.d/php7.2-fpm.conf、それでも/run/phpディレクトリを作成しません。
MarthyM

3

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

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


OK、私はこのような初心者だと思って、これを私の質問に入れるべきだったと思います。私は学習していますが、皆さんに感謝します!
user24601

2
いいえ、答えを作成することは正しいことでした。そのため、人々はそれに答えることができ、あなたの質問を混乱させません。あなた自身の質問に答えることは、SOで明示的に奨励されています。そして、あなたの答えも間違っていません。これを行うにはもっと良い方法があるというだけなので、IMOはあなたが落とされるべきではありませんでした。それも支持されるべきではありません。:)
ブライアンラーセン

2
一方でRuntimeDirectoryこれを行うのは良い方法である今、この答えが唯一の回避策ですので、私は、そのディレクティブが存在しないにsystemdの古いバージョン(208)を使用してサーバーに走りました。
デイバーCubranic

これは、サービスユーザーとは異なるユーザーがディレクトリを作成して所有する必要がある場合、またはディレクトリを再起動まで保持する場合、またはディレクトリを複数のサービス間で共有する場合にも、その方法のようです。
パーキンス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.