再起動ごとに/ var /に作成されたフォルダーの実行方法


60

最近のubuntus(特に、私が最も興味を持っているのは12.04です)/var/runはtmpfsです。したがって、リブートするたびに空になると思います。

しかし、そこにはいくつかのフォルダーがあります/var/run/mysqld。再起動のたびにこれらのフォルダーはどのように作成されますか?コピーしたテンプレートフォルダー/var/run/(もしそうなら、どのスクリプトがそれを行うか)、または各フォルダーがmkdir個別に作成されたもの、または何ですか?

編集:して
ください、それ/var/runは永続的であるか、または永続的であると答えないでください/run。そうではないからです。

それは上でそうであったとしても、あなたのシステムは、通常の12.04にはそうではありません。


うーん、だから私は50人の担当者を持っています。明らかに明らかに間違っている2つの答えの1つに無駄になりました
。...-サンドマン

誰か、賢明なことなら何でも答えてください。あなたは+50 repを得ます:)
Sandman4

回答:


82

(@Zulakisとこの回答がUbuntuの進行中の開発に追いついていなかったことを指摘してくれたServerfault の回答に感謝します。)

採用によりsystemdのように15.04、今このような一時的なファイルやディレクトリを作成するための集中管理メカニズムがあります。この方法を利用したいサービスを削除することができmkdir、独自の起動スクリプト内のコマンドを、代わりに置く.confには、ファイルを/etc/tmpfiles.d/run/tmpfiles.dまたは/usr/lib/tmpfiles.dUbuntuのサービスは、最後のオプションを好むように見せかけて、。たとえば、私のシステムには次のものがあります。

$ egrep -r /var/run /usr/lib/tmpfiles.d

/usr/lib/tmpfiles.d/var.conf:L /var/run - - - - ../run
/usr/lib/tmpfiles.d/sudo.conf:d /var/run/sudo 0711 root root
/usr/lib/tmpfiles.d/sudo.conf:D /var/run/sudo/ts 0700 root root
/usr/lib/tmpfiles.d/postgresql.conf:d /var/run/postgresql 2775 postgres postgres - -
/usr/lib/tmpfiles.d/sshd.conf:d /var/run/sshd 0755 root root
/usr/lib/tmpfiles.d/screen-cleanup.conf:d /var/run/screen 0775 root utmp

dそれがパスした後、それはまだ、存在しない場合は、ディレクトリを作成するための手段、および残りは権限、ユーザー、およびグループです。これらのディレクトリは、対応するサービスが開始されたかどうかに関係なく作成されます。

完全なドキュメントについては、を参照してくださいman tmpfiles.d


事前にシステム化された古い回答:

開始時に個々のサービスによって動的に作成されているように見えます。

$ sudo egrep -r 'mkdir.*/var/run' /etc

/etc/init.d/ssh:        mkdir /var/run/sshd
/etc/init.d/bind9:      mkdir -p /var/run/named
/etc/init.d/timidity:    mkdir -p /var/run/timidity
/etc/init.d/bzflag:                mkdir -p /var/run/bzflag
/etc/init.d/dns-clean:mkdir /var/run/pppconfig >/dev/null 2>&1 || true
/etc/init/winbind.conf: mkdir -p /var/run/samba/winbindd_privileged
/etc/init/dbus.conf:    mkdir -p /var/run/dbus
/etc/init/ssh.conf:    mkdir -p -m0755 /var/run/sshd
/etc/init/libvirt-bin.conf:     mkdir -p /var/run/libvirt
/etc/init/cups.conf:    mkdir -p /var/run/cups/certs

私はこれがmysqldを処理するものだと信じています:

[ -d /var/run/mysqld ] || install -m 755 -o mysql -g root -d /var/run/mysqld
/lib/init/apparmor-profile-load usr.sbin.mysqld

man install -dフォームは「指定されたディレクトリのすべてのコンポーネントを作成する」と言います。


1
これは、常にそうではないようです:serverfault.com/questions/824393/...
Zulakis

ありがとう、@ Zulakis。私はいくつかの編集を行いましたが、この機能の使用経験に基づいて、それらが正しいかどうかを知っていただければ幸いです。
ポール

1
は、私にはよく見えますよ!あなたの答えを更新してくれてありがとう:)
ズラキス

1
egrep -rコマンドに対する賛成票。ファイル検索内で検索を探しています!:
ニックウッドハムス

5

新しいtmpfsがマウントされた/runフォルダーにより、udev、lvm、mdadmなどのプログラムは、シャットダウンするまでinitrdからのランタイムデータを保持できます。

/var Linux / UNIXシステムの標準ディレクトリです。「変数」の略で、多くのログ、キャッシュ、BUTが変数設定ファイル、さらにはいくつかのシステム構成データベースも存在する場所です。

ほとんどのものは/var、システムによって適切にパージおよび調整される必要があります。仮想メモリのスワップファイルも存在する/varので、それを混乱させないでください。/var/runまた、アクティブに実行されているプロセスデーモンのロットステータスとパラメータ情報を保持します。

このディレクトリには、システムが起動されてからのシステムを説明するシステム情報データが含まれています。このディレクトリの下のファイルは、ブートプロセスの開始時にクリア(必要に応じて削除または切り捨て)する必要があります。プログラムには、サブディレクトリがあり/var/runます; これは、複数のランタイムファイルを使用するプログラムに推奨されます。

さて、/var/runtmpfsとしてマウントされています。これは、マシンのブート時には完全に空であり、PIDファイルが残っているためにデーモンが起動しないようにするためにこのようにすることを意味します。

通常、起動スクリプトは、使用する前に必要なディレクトリを作成します。PIDファイルを保存する場合は、PIDファイルを/var/run直接作成するか、ディレクトリを作成してからPIDファイルを作成します。これは、再起動後もデータを保持する必要があるデータを保存する場所ではありません。

ソース:パス名とLinuxシステム管理者ガイド


5

このスレッドに出くわした人は、ディレクトリを作成して/var/run靴下やpidファイルなどを保存できるようにアプリケーションを構成する方法のソリューションを探しているので、ここに例を示します。MySQL sockファイルをに保存したかったため、このスレッドに出会いました/var/run/mysqld。そのため、このスレッドに出会った後/etc/init、例としてファイルを調べ始めました。dbusは良いものでした。そして、次のmysqlスタートアップ構成を思いつきました。

start on runlevel [2345] 
stop on runlevel [!2345] 
expect daemon 

pre-start script 
    mkdir -p -m0755 /var/run/mysqld 
    chown mysql:mysql /var/run/mysqld 
end script 

exec /etc/init.d/mysql start 
pre-stop exec /etc/init.d/mysql stop 

開始前のスクリプト部分がトリックを行いました。


2

それでも、/ var / run / mysqldなどのいくつかのフォルダーがあります。再起動のたびにこれらのフォルダはどのように作成されますか?/ var / run /にコピーしたテンプレートフォルダー(もしそうであれば、どのスクリプトがそれを行うか)、または各フォルダーを個別にmkdirしたか、または何ですか?

File Hierarchy Standardで定義されているように、/var/runor /runは揮発性のランタイムデータを格納するために使用されます。

そこに作成されたすべてのフォルダとファイルは、ファイルを作成したそれぞれのプログラムによって管理されます。コピーされるテンプレートフォルダのようなものはありません。すべてのプログラムはそのフォルダを使用して揮発性情報を保存できます。保存されたデータは、システムを再起動すると失われます。

/runフォルダーを使用する一般的なことはpid、実行中のデーモン、プロセスのプロセス番号を含むマーカーファイルを保存することです。これらは主に、たとえば次の場所にある開始/停止スクリプトに使用されます。/etc/init.d/

それがあなたに物事を明確にしたことを願っています!

br


1

あなたの仮定は絶対に正しいわけではありません。/varフォルダーの場所は交渉可能です/var。つまり、フォルダーを見つけるための代替パーティションまたはボリュームを使用できます。/varフォルダーの場所に関係なく、フォルダーは/var/runフォルダーへのシンボリックリンクで/runあり、その内容は再起動後も残りますが、多くのファイルは/run起動中に開始されるサービスによって起動時に生成または変更されます。したがってmysqld/var/runディレクトリなどにファイルをロードするためのサービスは-などで、現在存在しない場合はサブディレクトリを作成するように設定されます。


1
/ var / runにいくつかのフォルダーを作成しましたが、再起動後に消えました。(具体的には12.04)
サンドマン

また、/ var / runが実際にtmpfs askubuntu.com/questions/57297/
。– Sandman4

-2

douggroは完全に正しい、/ var / runはtmpfsとしてマウントされ、/ var / runはリブート後も持続する/ runへのシンボリックリンクです。走る。

したがって、/ runにファイルを作成する、起動時に起動されるデーモンであるmysqldなどのブートサービスには、/ var / runに表示されるファイルもあります(/ run rememberへのシンボリックリンク)。/ var / runで再起動しても保持されるファイルを作成する場合は、/ runで作成してから再起動します。

これがあなたの質問に答えることを願っています。


3
どちらも間違っているか、非標準のセットアップを使用しています。自分で確認してください。マウント| grep / run .... tmpfs on / runタイプtmpfs
スティーブンK

1
「/ var / runで再起動しても保持されるファイルを作成する場合は、/ runで作成してから再起動します。」それは正しくありません。tmpfs揮発性であり、変更は失われます。
オータン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.