每次重新启动时如何在/ var /中创建文件夹


60

在最近的ubuntus中(具体地说,我最感兴趣的是12.04)/var/run是tmpfs,因此我认为每次重新启动时它就开始为空。

但是,我看到那里有一些文件夹,例如/var/run/mysqld和许多其他文件夹。每次重新启动时如何创建这些文件夹?是否有一些模板文件夹要复制到/var/run/(如果需要,该脚本执行哪个脚本),或者分别复制每个文件夹mkdir,或者什么?

编辑:
请不要回答/var/run是持久的,还是/run持久的。因为不是。

即使在您的系统上是这样,在常规12.04上也不是这样。


嗯,所以我要代表50人 浪费在两个答案这两者都是显然完全错误之一....
Sandman4

有人,请回答任何明智的
举动

Answers:


82

(感谢@Zulakis和Serverfault 的答案,指出该答案与Ubuntu的持续开发不符。)

由于采用的systemd15.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

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形式将“创建指定目录的所有组件”。



谢谢,@ Zulakis。我进行了一些编辑,并希望根据您使用此功能的经验知道它们是否正确。
Paul

1
对我来说看上去很好!感谢您更新答案:)
Zulakis

1
支持egrep -r命令。一直在文件搜索内寻找搜索!:-)
Nick Woodhams

5

新的tmpfs挂载/run文件夹允许udev,lvm和mdadm等程序将运行时数据从initrd保留到关机。

/var 是任何Linux / UNIX系统的标准目录-代表“变量”,并且是存储大量日志,文件,BUT以及编程变量设置文件甚至某些系统配置数据库的地方。

系统中/var应适当清除和调节其中的大多数内容。您用于虚拟内存的交换文件也位于其中,/var所以请不要为此而烦恼。/var/run还包含大量正在运行的进程守护进程的状态和参数信息。

该目录包含描述自引导以来的系统的系统信息数据。在引导过程开始时,必须清除(视情况删除或截断)此目录下的文件。程序可能具有的子目录/var/run;对于使用多个运行时文件的程序,建议这样做。

好吧,因为/var/run被安装为tmpfs。这意味着当您的计算机启动时,它完全是空的,并且是为了防止诸如daemons之类的东西由于剩余的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 

启动前脚本部分可以解决问题。


2

但是,我看到那里有一些文件夹,例如/ var / run / mysqld和许多其他文件夹。每次重新启动时如何创建这些文件夹?是否有一些模板文件夹复制到/ var / run /中(如果是,则由哪个脚本执行),或者分别复制到每个文件夹,或者什么?

根据文件层次结构标准中的定义,/var/run/run用于存储易失性运行时数据。

在其中创建的所有文件夹和文件均由创建文件的相应程序管理。没有复制模板文件夹这样的东西,每个程序都可以使用该文件夹存储易失性信息。系统重新启动时,存储的数据将丢失。

使用该/run文件夹的常见用法是存储pid正在运行的守护程序,即包含进程的进程号的标记文件。它们主要用于开始/停止脚本,例如,您可以在/etc/init.d/

我希望这使您明白了!

br


1

您的假设并非绝对正确。/var文件夹的位置是可以协商的-也就是说,您可以使用替代分区或卷来定位/var文件夹。不管/var文件夹位于何处,该文件夹都是该/var/run文件夹的符号链接,/run并且其内容在重新引导后仍然保留,尽管其中的许多文件/run是在引导过程中启动的服务在引导时生成或修改的。因此,诸如服务之类的服务mysqld要求将文件加载到/var/run目录中,并设置为创建子目录(如果当前不存在子目录)。


1
我在/ var / run中创建了一些文件夹,它们在重新启动后消失了。(具体时间为12.04)
Sandman13年

还可以在这里看到/ var / run确实是tmpfsaskubuntu.com/questions/57297/…– Sandman4 2013
6

-2

douggro是完全正确的,/ var / run作为tmpfs挂载,/ var / run是/ run的符号链接,在重新启动后保持不变,因此/ run /中的所有内容也会出现在/ var /中(并留在其中)跑。

因此,任何在mysqld中启动文件的启动服务(例如mysqld)都是在启动时启动的,它在/ run中创建文件,在/ var / run中也将显示文件(记住/ run的符号链接)。如果要创建一个文件,该文件在/ var / run中将通过重新引导而保留,请在/ run中创建它,然后重新引导。

希望这能回答您的问题。


3
你们都错了,或者使用了非标准的设置。检查自己。坐骑 grep / run .... / run类型tmpfs上的tmpfs
Steven K

1
“如果要创建一个文件,该文件在/ var / run中重新启动将持续存在,请在/ run中创建它,然后重新启动。” 那是不正确的。tmpfs易变,丢失的更改。
ortang 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.