在最近的 ubuntus(特别是,我最感兴趣的是 12.04)/var/run是 tmpfs,因此我假设每次重新启动时它都是空的。
但是,我看到了一些文件夹,例如/var/run/mysqld和许多其他文件夹。每次重新启动时如何创建这些文件夹?是否有一些模板文件夹复制到/var/run/(如果是,哪个脚本执行该操作),或者每个文件夹分别被复制mkdir,或者什么?
编辑:
请不要回答/var/run是持久的,或者/run是持久的。因为它不是。
即使在您的系统上是这样,在常规 12.04 上也不是这样。
Pau*_*aul 104
(感谢@Zulakis 和关于 Serverfault 的回答指出这个回答没有跟上 Ubuntu 的持续发展。)
由于采用的systemd为15.04,现在用于创建的临时文件和目录,如这些集中的机制。希望使用这种方法可以删除服务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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我相信这是处理 mysqld 的:
[ -d /var/run/mysqld ] || install -m 755 -o mysql -g root -d /var/run/mysqld
/lib/init/apparmor-profile-load usr.sbin.mysqld
Run Code Online (Sandbox Code Playgroud)
man install 说 -d 形式将“创建指定目录的所有组件”。
新的 tmpfs 挂载/run文件夹允许 udev、lvm 和 mdadm 等程序将运行时数据从 initrd 保存到关闭。
/var 是任何 Linux/UNIX 系统的标准目录——它代表“变量”,是一个存放大量日志、缓存的地方,但也有程序变量设置文件,甚至一些系统配置数据库驻留。
大多数东西/var应该由系统正确清除和调节。您的虚拟内存交换文件也存在,/var所以不要弄乱它。/var/run还保存了大量正在运行的进程守护程序的状态和参数信息。
此目录包含描述系统自启动以来的系统信息数据。在启动过程开始时,必须清除(根据需要删除或截断)此目录下的文件。程序可能有一个子目录/var/run;对于使用多个运行时文件的程序,鼓励这样做。
好吧,因为/var/run是作为 tmpfs 安装的。这意味着当你的机器启动时它是完全空的,它是为了防止像守护进程这样的东西因为一个遗留的 PID 文件而无法启动。
启动脚本通常会在使用它们之前创建它们需要的目录。如果要存储 PID 文件,请/var/run直接将其放入或在创建 PID 文件之前创建一个目录。这不是存储需要在重新启动后保留在那里的数据的地方。
来源:路径名和 Linux 系统管理员指南
小智 5
对于遇到此线程的任何人,因为您正在寻找如何配置应用程序的解决方案,以便它在其中创建目录,/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
Run Code Online (Sandbox Code Playgroud)
预启动脚本部分起到了作用。
| 归档时间: |
|
| 查看次数: |
82428 次 |
| 最近记录: |