(Cảm ơn @Zulakis và câu trả lời trên Serverfault vì đã chỉ ra rằng câu trả lời này không theo kịp sự phát triển đang diễn ra của Ubuntu.)
Với việc áp dụng từ systemd
ngày 15.04 , giờ đây đã có một cơ chế tập trung để tạo các tệp và thư mục tạm thời như thế này. Một dịch vụ có nhu cầu sử dụng phương pháp này có thể loại bỏ mkdir
các lệnh trong tập lệnh khởi động riêng của mình và thay vào đó đặt một .conf
tập tin trong /etc/tmpfiles.d
, /run/tmpfiles.d
hoặc /usr/lib/tmpfiles.d
, với các dịch vụ Ubuntu dường như thích lựa chọn cuối cùng. Ví dụ: hệ thống của tôi hiện có:
$ 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
Các d
phương tiện để tạo một thư mục nếu nó không tồn tại, sau đó là đường dẫn và phần còn lại là các quyền, người dùng và nhóm. Các thư mục này sẽ được tạo bất kể dịch vụ tương ứng có được bắt đầu hay không.
Đối với tài liệu đầy đủ, xem man tmpfiles.d
.
TRẢ LỜI TRƯỚC HỆ THỐNG TRẢ LỜI:
Có vẻ như chúng được tạo động bởi các dịch vụ riêng lẻ khi chúng bắt đầu:
$ 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
Tôi tin rằng đây là một trong những xử lý 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
nói rằng biểu mẫu -d sẽ "tạo ra tất cả các thành phần của các thư mục được chỉ định".