วิธีสร้างโฟลเดอร์ใน / var / run ในการรีบูตแต่ละครั้ง


60

ใน ubuntus เมื่อเร็ว ๆ นี้ (โดยเฉพาะสิ่งที่ฉันสนใจมากที่สุดคือ 12.04) /var/runคือ tmpfs และฉันคิดว่ามันว่างเปล่าในการรีบูตแต่ละครั้ง

ถึงกระนั้นฉันก็เห็นว่ามีบางโฟลเดอร์เหมือน/var/run/mysqldและอื่น ๆ โฟลเดอร์เหล่านั้นสร้างขึ้นอย่างไรในการรีบูตแต่ละครั้ง มีโฟลเดอร์เทมเพลตที่คัดลอกไปยัง/var/run/(และถ้าเป็นเช่นนั้นซึ่งสคริปต์ทำเช่นนั้น) หรือแต่ละโฟลเดอร์mkdirแยกกันหรืออะไร

แก้ไข:
โปรดอย่าตอบว่า/var/runเป็นแบบถาวรหรือ/runถาวร เพราะมันไม่ใช่

แม้ว่ามันจะเป็นเช่นนั้นในระบบของคุณแต่ก็ไม่ได้เป็นเช่นนั้นใน 12.04 ปกติ


อืมดังนั้นฉันจะมี 50 ตัวแทน เสียหนึ่งในสองคำตอบที่เห็นได้ชัดว่าผิดทั้งสองอย่าง ....
Sandman 4

ใครบางคนโปรดตอบอะไรเหมาะสมและคุณจะได้รับ 50 ตัวแทน :)
Sandman4

คำตอบ:


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 จะ "สร้างส่วนประกอบทั้งหมดของไดเรกทอรีที่ระบุ"


1
ดูเหมือนจะไม่เป็นเช่นนี้เสมอไป: serverfault.com/questions/824393/ …
Zulakis

ขอบคุณ @Zulakis ฉันได้ทำการแก้ไขและขอขอบคุณที่ทราบว่าการแก้ไขนั้นขึ้นอยู่กับประสบการณ์ของคุณด้วยคุณลักษณะนี้
Paul

1
ดูดีกับผม! ขอขอบคุณที่อัปเดตคำตอบของคุณ :)
Zulakis

1
ลงทะเบียนสำหรับคำสั่ง egrep -r รับการค้นหาในการค้นหาไฟล์! :-)
Nick Woodhams

5

/runโฟลเดอร์ที่ติดตั้ง tmpfs ใหม่อนุญาตให้โปรแกรมเช่น udev, lvm และ mdadm เก็บข้อมูลรันไทม์จาก initrd จนกระทั่งปิดเครื่อง

/var เป็นไดเรกทอรีมาตรฐานของระบบ Linux / UNIX ใด ๆ - มันหมายถึง "ตัวแปร" และเป็นสถานที่ที่มีจำนวนมากบันทึก, cahces, BUT แต่ยังโปรแกรมไฟล์การตั้งค่าตัวแปรและแม้แต่ฐานข้อมูลการกำหนดค่าระบบบางส่วนอยู่

สิ่งส่วนใหญ่/varควรได้รับการล้างและควบคุมโดยระบบอย่างเหมาะสม ไฟล์สว็อปของคุณสำหรับหน่วยความจำเสมือนนั้นยังมีอยู่/varดังนั้นอย่ายุ่งกับมัน /var/runยังเก็บข้อมูลสถานะและพารามิเตอร์จำนวนมากของ daemans ที่กำลังรันอยู่

ไดเร็กทอรีนี้มีข้อมูลระบบที่อธิบายถึงระบบตั้งแต่ถูกบูท ไฟล์ภายใต้ไดเรกทอรีนี้จะต้องล้าง (ลบหรือตัดทอนตามความเหมาะสม) ที่จุดเริ่มต้นของกระบวนการบูต โปรแกรมอาจมีไดเรกทอรีย่อยของ/var/run; สิ่งนี้ได้รับการสนับสนุนสำหรับโปรแกรมที่ใช้มากกว่าหนึ่งไฟล์รันไทม์

เนื่องจาก/var/runถูกเมานท์เป็น tmpfs นั่นหมายความว่ามันว่างเปล่าโดยสิ้นเชิงเมื่อบู๊ตเครื่องของคุณและมันควรจะเป็นแบบนี้เพื่อป้องกันสิ่งต่าง ๆ เช่น daemons ที่ไม่เริ่มทำงานเนื่องจากไฟล์ PID ที่เหลืออยู่

สคริปต์เริ่มต้นมักจะสร้างไดเรกทอรีที่ต้องการก่อนใช้งาน หากคุณต้องการจัดเก็บไฟล์ PID ให้ใส่/var/runโดยตรงหรือสร้างไดเรกทอรีก่อนสร้างไฟล์ PID นี่เป็นสถานที่สำหรับเก็บข้อมูลที่จำเป็นต้องอยู่ตรงนั้นตลอดการบูตเครื่องใหม่

แหล่งที่มา: คู่มือผู้ดูแลระบบชื่อพา ธ และ Linux


5

สำหรับทุกคนที่เจอเธรดนี้เนื่องจากคุณกำลังมองหาวิธีการที่คุณสามารถกำหนดค่าแอปพลิเคชันเพื่อให้สร้างไดเรกทอรี/var/runเพื่อให้สามารถเก็บเป็นไฟล์ sock หรือ pid หรืออะไรก็ได้ ... นี่คือตัวอย่าง ฉันเจอกระทู้นี้เพราะฉันต้องการเก็บไฟล์ถุงเท้า MySQL /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 / (และถ้าเป็นเช่นนั้นสคริปต์ใดที่ทำเช่นนั้น) หรือแต่ละโฟลเดอร์ mkdired แยกกันหรืออะไร?

ตามที่กำหนดไว้ในแฟ้มลำดับชั้นมาตรฐาน/var/runหรือ/runจะใช้ในการจัดเก็บข้อมูลรันไทม์ระเหย

โฟลเดอร์และไฟล์ทั้งหมดที่สร้างขึ้นมีการจัดการโดยโปรแกรมที่เกี่ยวข้องที่สร้างไฟล์ ไม่มีสิ่งใดเป็นโฟลเดอร์แม่แบบที่ถูกคัดลอกทุกโปรแกรมสามารถใช้โฟลเดอร์นั้นเพื่อเก็บข้อมูลที่ระเหยได้ ข้อมูลที่เก็บไว้จะหายไปเมื่อระบบรีบูต

สิ่งทั่วไปสำหรับการใช้/runโฟลเดอร์คือการเก็บpiddaemons ที่กำลังทำงานอยู่ไฟล์ทำเครื่องหมายที่มีหมายเลขกระบวนการของกระบวนการ โดยส่วนใหญ่จะใช้สำหรับสคริปต์เริ่ม / หยุดที่คุณสามารถหาตัวอย่างได้/etc/init.d/

ฉันหวังว่าสิ่งที่ชัดเจนสำหรับคุณ!

br


1

สมมติฐานของคุณไม่ถูกต้องอย่างแน่นอน ตำแหน่งที่ตั้งของ/varโฟลเดอร์นั้นสามารถต่อรองได้ - นั่นคือคุณสามารถใช้พาร์ติชันสำรองหรือไดรฟ์ข้อมูลที่จะค้นหา/varโฟลเดอร์ ไม่ว่า/varโฟลเดอร์จะอยู่ที่ใด/var/runโฟลเดอร์จะเป็น symlink ไปยัง/runโฟลเดอร์และเนื้อหาจะยังคงอยู่หลังจากการรีบูตแม้ว่าไฟล์จำนวนมากในไฟล์/runจะถูกสร้างหรือแก้ไขเมื่อบู๊ตโดยบริการที่เริ่มต้นในระหว่างการบู๊ต ดังนั้นจึงเป็นบริการ - เช่นmysqld- ที่เรียกใช้สำหรับการโหลดไฟล์ลงใน/var/runไดเรกทอรีและได้รับการตั้งค่าให้สร้างไดเรกทอรีย่อยหากไม่มีอยู่ในปัจจุบัน


1
ฉันสร้างบางโฟลเดอร์ใน / var / run และหายไปหลังจากรีบูต (เฉพาะวันที่ 12.04)
Sandman4

นอกจากนี้ดูที่นี่ที่ / var / run แน่นอน tmpfs askubuntu.com/questions/57297/ …
Sandman4

-2

douggro นั้นถูกต้องอย่างแน่นอน / var / run ถูกเมานต์เป็น tmpfs และ / var / run เป็น symlink to / run ซึ่งยังคงอยู่ตลอดการบู๊ตดังนั้นสิ่งใดก็ตามที่อยู่ใน / run จะปรากฏใน (และอยู่ใน) / var / วิ่ง.

ดังนั้นบริการบู๊ตใด ๆ เช่น mysqld ซึ่งเป็น daemon ซึ่งเริ่มเมื่อเวลาบู๊ตซึ่งสร้างไฟล์ใน / run จะมีไฟล์ที่สามารถมองเห็นได้ใน / var / run (symlink to / run Remember) หากคุณต้องการสร้างไฟล์ที่จะคงอยู่ผ่านการรีบูตใน / var / run ให้สร้างมันใน / รันแล้วรีบูต

หวังว่านี่จะตอบคำถามของคุณ


3
คุณทั้งคู่เข้าใจผิดหรือใช้การตั้งค่าที่ไม่ได้มาตรฐาน ตรวจสอบด้วยตัวคุณเอง ติดตั้ง | grep / run .... tmpfs on / run type tmpfs
Steven K

1
"ถ้าคุณต้องการสร้างไฟล์ที่จะคงอยู่ผ่านการรีบูตใน / var / run ให้สร้างมันใน / รันแล้วรีบูต" ไม่ถูกต้อง tmpfsมีความผันผวนและการเปลี่ยนแปลงจะหายไป
ortang
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.