web-dev-qa-db-ja.com

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

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

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

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

your systemの場合でも、通常の12.04ではそうではありません。

57
Sandman4

(@Zulakisと Serverfaultに関する回答 に感謝します。この回答はUbuntuの継続的な開発に追いついていなかったことを指摘してくれました。)

15.04 の時点でsystemdが採用されたことにより、これらのような一時ファイルとディレクトリを作成するための集中化されたメカニズムが存在するようになりました。このメソッドを使用したいサービスは、mkdirコマンドを独自のスタートアップスクリプトから削除し、代わりに.confファイルを/etc/tmpfiles.d/run/tmpfiles.d、または/usr/lib/tmpfiles.dに配置できます。Ubuntuサービスは最後のオプションを好むようです。たとえば、私のシステムには次のものがあります。

$ 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形式が「指定されたディレクトリのすべてのコンポーネントを作成する」と言います。

77
Paul

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

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

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

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

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

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

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

5
Mitch

このスレッドに出くわした人は、/var/runにディレクトリを作成し、sockまたは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 

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

5
dcarrith

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

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

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

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

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

br

2
ortang

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

1
douggro