最近のubuntusでは(特に、私が最も興味を持っているのは12.04です)/var/run
はtmpfsであるため、リブートするたびに空になると思います。
それでも、/var/run/mysqld
などのいくつかのフォルダーがあります。再起動のたびにこれらのフォルダーはどのように作成されますか? /var/run/
にコピーしたテンプレートフォルダー(もしそうなら、どのスクリプトがそれを行うか)、または各フォルダーmkdir
'を個別にコピーした、または何ですか?
編集:/var/run
が永続的である、または/run
が永続的であると答えないでください。そうではないからです。
your systemの場合でも、通常の12.04ではそうではありません。
(@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形式が「指定されたディレクトリのすべてのコンポーネントを作成する」と言います。
新しい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システム管理者ガイド
このスレッドに出くわした人は、/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
開始前スクリプト部分がトリックを行いました。
それでも、/ var/run/mysqldなどのいくつかのフォルダーがあります。再起動のたびにこれらのフォルダーはどのように作成されますか?/var/run /にコピーしたテンプレートフォルダー(もしそうであれば、どのスクリプトがそれを行いますか)、または各フォルダーを個別にmkdirしましたか?
File Hierarchy Standard で定義されているように、/var/run
または/run
は、揮発性ランタイムデータの格納に使用されます。
そこに作成されたすべてのフォルダとファイルは、ファイルを作成したそれぞれのプログラムによって管理されます。コピーされるテンプレートフォルダのようなものはありません。すべてのプログラムはそのフォルダを使用して揮発性情報を保存できます。保存されたデータは、システムを再起動すると失われます。
/run
フォルダーを使用する一般的なことは、実行中のデーモンのpid
、プロセスのプロセス番号を含むマーカーファイルを保存することです。これらは主に、たとえば/etc/init.d/
にある開始/停止スクリプトに使用されます
それがあなたに物事を明確にしたことを願っています!
br
あなたの仮定は絶対に正しいわけではありません。 /var
フォルダーの場所は交渉可能です。つまり、/var
フォルダーを見つけるための代替パーティションまたはボリュームを使用できます。 /var
フォルダーの場所に関係なく、/var/run
フォルダーは/run
フォルダーへのシンボリックリンクであり、その内容は再起動後も残りますが、/run
フォルダーの多くは起動中に開始されるサービスによって起動時に生成または変更されます。したがって、mysqld
などのサービスが/var/run
ディレクトリへのファイルのロードを呼び出し、現在存在しない場合はサブディレクトリを作成するように設定されます。