Bagaimana folder dibuat di / var / dijalankan pada setiap reboot

60

Di ubuntus baru-baru ini (khususnya, yang paling menarik minat saya adalah 12,04) /var/runadalah tmpfs, dan dengan demikian saya menganggapnya mulai kosong dengan setiap reboot.

Namun, saya melihat ada beberapa folder, seperti /var/run/mysqlddan banyak lainnya. Bagaimana folder itu dibuat pada setiap reboot? Apakah ada folder templat yang disalin ke /var/run/(dan jika demikian, skrip mana yang melakukan itu), atau masing-masing folder mkdirdiedit secara terpisah, atau apa?

EDIT:
Tolong, jangan menjawab yang /var/rungigih, atau yang /rungigih. Karena BUKAN.

Bahkan jika demikian pada sistem Anda , itu tidak demikian pada 12,04 biasa.

Sandman4
sumber
Hmm, jadi saya akan memiliki 50 rep. terbuang pada salah satu dari dua jawaban yang keduanya jelas-jelas salah ....
Sandman4
Seseorang, tolong jawab APA SAJA yang masuk akal dan Anda mendapatkan +50 rep :)
Sandman4

Jawaban:

82

(Terima kasih kepada @Zulakis dan jawaban pada Serverfault karena menunjukkan bahwa jawaban ini tidak mengikuti perkembangan Ubuntu yang sedang berlangsung.)

Dengan adopsi systemdpada 15.04 , sekarang ada mekanisme terpusat untuk penciptaan file-file sementara dan direktori seperti ini. Sebuah layanan yang ingin menggunakan metode ini dapat menghapus mkdirperintah dalam skrip startup sendiri dan bukannya menempatkan .conffile dalam /etc/tmpfiles.d, /run/tmpfiles.datau /usr/lib/tmpfiles.d, dengan layanan Ubuntu seakan lebih memilih opsi terakhir. Misalnya, sistem saya sekarang memiliki:

$ 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

The dsarana untuk membuat direktori jika tidak sudah ada, setelah itu adalah jalan, dan sisanya adalah hak akses, pengguna, dan kelompok. Direktori ini akan dibuat terlepas dari apakah layanan yang sesuai pernah dimulai.

Untuk dokumentasi lengkap, lihat man tmpfiles.d.


JAWABAN PRE-SYSTEMD LAMA:

Sepertinya mereka dibuat secara dinamis oleh layanan individual saat mereka mulai:

$ 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

Saya percaya ini adalah yang menangani 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 mengatakan bahwa bentuk -d akan "membuat semua komponen dari direktori yang ditentukan".

Paul
sumber
1
Tampaknya tidak selalu demikian: serverfault.com/questions/824393/…
Zulakis
Terima kasih, @ Zulakis. Saya melakukan beberapa pengeditan dan akan sangat menghargai mengetahui apakah mereka benar berdasarkan pengalaman Anda dengan fitur ini.
Paul
1
Terlihat bagus untukku! Terima kasih telah memperbarui jawaban Anda :)
Zulakis
1
Upvote untuk perintah egrep -r. Telah mencari pencarian dalam pencarian file! :-)
Nick Woodhams
5

/runFolder baru yang dipasang tmpfs memungkinkan program seperti udev, lvm dan mdadm untuk menyimpan data runtime dari initrd hingga shutdown.

/var adalah direktori standar sistem Linux / UNIX - singkatan dari "variabel" dan merupakan tempat di mana banyak log, cahces, TETAPI juga memprogram file pengaturan variabel dan bahkan beberapa database konfigurasi sistem berada.

Sebagian besar barang /varharus dibersihkan dan diatur dengan benar oleh sistem. File swap Anda untuk memori virtual juga hidup /varjadi jangan main-main dengan itu. /var/runjuga memegang banyak status dan informasi parameter daemon proses yang aktif berjalan.

Direktori ini berisi data informasi sistem yang menggambarkan sistem sejak sistem di-boot. File di bawah direktori ini harus dihapus (dihapus atau dipotong seperlunya) di awal proses boot. Program dapat memiliki sub-direktori /var/run; ini dianjurkan untuk program yang menggunakan lebih dari satu file run-time.

Nah karena /var/runsudah terpasang sebagai tmpfs. Itu berarti itu benar-benar kosong ketika mesin Anda boot dan itu dimaksudkan seperti ini untuk mencegah hal-hal seperti daemon tidak memulai karena file PID yang tersisa.

Skrip startup biasanya membuat direktori yang mereka butuhkan sebelum menggunakannya. Jika Anda ingin menyimpan file PID, masukkan /var/runlangsung atau buat direktori sebelum membuat file PID. Ini bukan tempat untuk menyimpan data yang perlu tetap ada di seluruh reboot.

Sumber: Pathname & Panduan Sistem Administrator Linux

Mitch
sumber
5

Bagi siapa saja yang menemukan utas ini karena Anda sedang mencari solusi untuk bagaimana Anda dapat mengkonfigurasi aplikasi sehingga menciptakan direktori /var/runsehingga dapat menyimpannya file sock atau pid atau apa pun ... inilah contohnya. Saya menemukan utas ini karena saya ingin menyimpan file kaus kaki MySQL /var/run/mysqld. Jadi, setelah saya menemukan utas ini, saya mulai mencari di /etc/initfile untuk contoh. dbus itu bagus. Dan, saya datang dengan konfigurasi startup mysql ini:

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 

Bagian skrip pra-mulai melakukan trik.

dcarrith
sumber
2

Namun, saya melihat ada beberapa folder, seperti / var / run / mysqld dan banyak lainnya. Bagaimana folder itu dibuat pada setiap reboot? Apakah ada beberapa folder template yang disalin ke / var / run / (dan jika demikian, script mana yang melakukan itu), atau setiap folder mkdired secara terpisah, atau apa?

Sebagaimana didefinisikan dalam Standar Hirarki File , /var/runatau /rundigunakan untuk menyimpan data runtime yang mudah menguap.

Semua folder dan file yang dibuat di sana dikelola oleh masing-masing program yang membuat file. Tidak ada yang namanya folder template yang disalin, setiap program dapat menggunakan folder itu untuk menyimpan informasi yang tidak stabil. Data yang disimpan hilang ketika sistem reboot.

Hal yang umum untuk menggunakan /runfolder adalah menyimpan piddaemon yang sedang berjalan, file penanda yang berisi nomor proses dari suatu proses. Mereka terutama digunakan untuk skrip start / stop yang dapat Anda temukan misalnya di/etc/init.d/

Saya harap itu membuat segalanya jelas bagi Anda!

br

ortang
sumber
1

Asumsi Anda tidak sepenuhnya benar. Lokasi /varfolder dapat dinegosiasikan - yaitu, Anda dapat menggunakan partisi atau volume alternatif untuk menemukan /varfolder tersebut. Terlepas dari di mana /varfolder itu berada, /var/runfolder tersebut adalah symlink ke /runfolder dan isinya tetap setelah reboot, meskipun banyak file /runyang dihasilkan atau dimodifikasi saat boot oleh layanan yang dimulai saat boot. Jadi layanan - seperti mysqld- yang memanggil untuk memuat file ke /var/rundirektori dan diatur untuk membuat subdirektori jika mereka tidak ada saat ini.

douggro
sumber
1
Saya membuat beberapa folder di / var / run dan hilang setelah reboot. (khusus pada 12,04)
Sandman4
Lihat juga di sini bahwa / var / run memang tmpfs askubuntu.com/questions/57297/…
Sandman4
-2

douggro benar sekali, / var / run di-mount sebagai tmpfs, dan / var / run adalah symlink ke / run yang persisten di seluruh reboot, jadi semua yang berjalan / dijalankan juga akan muncul di (dan tetap di) / var / Lari.

Jadi setiap layanan boot seperti mysqld, yang merupakan daemon yang dimulai pada saat boot, yang membuat file dalam / run, juga akan memiliki file yang terlihat di / var / run (symlink ke / run ingat). Jika Anda ingin membuat file yang akan bertahan melalui reboot di / var / run, buat di / run lalu reboot.

Semoga ini menjawab pertanyaan Anda.

nisshh
sumber
3
Anda berdua salah, atau menggunakan pengaturan non-standar. Periksa sendiri. mount | grep / run .... tmpfs pada / jalankan ketik tmpfs
Steven K
1
"Jika Anda ingin membuat file yang akan bertahan melalui reboot di / var / run, buat di / run lalu reboot." Itu TIDAK benar. tmpfsvolatile dan perubahan hilang.
ortang