प्रत्येक रिबूट पर फोल्डर कैसे बनाए / चलते हैं


60

हाल के ubuntus में (विशेष रूप से, मुझे सबसे ज्यादा 12.04 क्या दिलचस्पी है) /var/runtmpfs है, और इस तरह मेरा मानना ​​है कि यह प्रत्येक रिबूट के साथ खाली होने लगता है।

फिर भी, मैं वहाँ कुछ फ़ोल्डर्स, जैसे /var/run/mysqldऔर कई अन्य देखें। कैसे उन फ़ोल्डरों को प्रत्येक रिबूट पर बनाया गया? क्या कुछ टेम्पलेट फ़ोल्डर है जो /var/run/(और यदि हां, तो कौन सी स्क्रिप्ट ऐसा करता है), या प्रत्येक फ़ोल्डर mkdirका एड अलग से, या क्या है?

संपादित करें:
कृपया, यह उत्तर न दें कि /var/runलगातार है, या जो /runलगातार है। क्योंकि यह नहीं है।

यहां तक ​​कि अगर यह आपके सिस्टम पर ऐसा है, तो यह एक नियमित 12.04 पर ऐसा नहीं है।


हम्म, इसलिए मैं 50 प्रतिनिधि करने जा रहा हूं। दो जवाबों में से एक पर बर्बाद जो स्पष्ट रूप से स्पष्ट रूप से गलत हैं ....
सैंडमेन 4

किसी ने, कृपया कुछ भी समझदारी से जवाब दिया और आपको +50 प्रतिनिधि मिला :)
Sandman4

जवाबों:


82

(@Zulakis के लिए धन्यवाद और सर्वरफॉल्ट पर एक जवाब जो इंगित करने के लिए है कि यह जवाब उबंटू के चल रहे विकास के साथ नहीं रखा गया था।)

15.04 के systemdरूप में अपनाने के साथ , अब अस्थायी फ़ाइलों और निर्देशिकाओं के निर्माण के लिए एक केंद्रीकृत तंत्र है जैसे कि ये। एक सेवा इस विधि का उपयोग करने के लिए निकाल सकते हैं बधाई देने के लिए अपने स्वयं के स्टार्टअप स्क्रिप्ट में कमांड और बजाय एक जगह में फ़ाइल , या Ubuntu सेवाओं अंतिम विकल्प पसंद करते हैं करने के लिए प्रतीयमान के साथ,। उदाहरण के लिए, मेरे सिस्टम में अब है:mkdir.conf/etc/tmpfiles.d/run/tmpfiles.d/usr/lib/tmpfiles.d

$ 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


OLD PRE-SYSTEMD ANSWER:

लगता है जैसे वे व्यक्तिगत सेवाओं द्वारा गतिशील रूप से बनाए जाते हैं जैसे वे शुरू करते हैं:

$ 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 मैंने कुछ संपादन किए और यह जानने की सराहना करेंगे कि क्या वे इस सुविधा के साथ आपके अनुभव के आधार पर सही हैं।
पॉल

1
मुझे ठीक लगता है! अपना उत्तर अपडेट करने के लिए धन्यवाद :)
Zulakis

1
Egrep -r कमांड के लिए अपवोट करें। फ़ाइल खोज के भीतर एक खोज की तलाश में रहा! :-)
निक वुडहैम्स

5

नया tmpfs- माउंटेड /runफ़ोल्डर udev, lvm और mdadm जैसे प्रोग्राम को बंद होने तक initrd से रनटाइम डेटा रखने की अनुमति देता है।

/var किसी भी लिनक्स / यूनिक्स प्रणाली की एक मानक निर्देशिका है - यह "चर" के लिए खड़ा है और एक जगह है जहाँ बहुत सारे लॉग, cahces, BUT भी चर सेटिंग्स फ़ाइलों को प्रोग्राम करते हैं और यहां तक ​​कि कुछ सिस्टम कॉन्फ़िगरेशन डेटाबेस भी रहते हैं।

अधिकांश चीजों /varको सिस्टम द्वारा ठीक से शुद्ध और विनियमित किया जाना चाहिए। वर्चुअल मेमोरी के लिए आपकी स्वैप फाइलें भी रहती हैं /varताकि उसमें गड़बड़ न हो। /var/runसक्रिय रूप से चल रहे प्रक्रिया डेमन्स की बहुत स्थिति और पैरामीटर जानकारी भी रखती है।

इस निर्देशिका में सिस्टम जानकारी डेटा है जिसमें सिस्टम को बूट किया गया था। बूट प्रक्रिया की शुरुआत में इस निर्देशिका के तहत फाइलें साफ की जानी चाहिए (हटाए गए या उपयुक्त के रूप में काट दी जानी चाहिए)। कार्यक्रमों की एक उप-निर्देशिका हो सकती है /var/run; यह उन कार्यक्रमों के लिए प्रोत्साहित किया जाता है जो एक से अधिक रन-टाइम फ़ाइल का उपयोग करते हैं।

खैर चूंकि /var/runtmpfs के रूप में मुहिम शुरू की गई है। इसका मतलब यह है कि यह पूरी तरह से खाली है जब आपके मशीन बूट और यह इस तरह के सामान को रोकने के लिए है जैसे कि डेमॉन की तरह बाएं पीआईडी-फ़ाइल के कारण शुरू न हो।

स्टार्टअप स्क्रिप्ट आमतौर पर उन निर्देशिकाओं का निर्माण करती हैं जिनकी उन्हें उपयोग करने से पहले आवश्यकता होती है। यदि आप पीआईडी-फाइल स्टोर करना चाहते हैं तो या तो /var/runसीधे इसमें डालें या पीआईडी-फाइल बनाने से पहले एक डायरेक्टरी बनाएं। यह डेटा को संग्रहीत करने के लिए कोई जगह नहीं है जिसे रिबूट के दौरान वहां बने रहने की आवश्यकता है।

स्रोत: पथनाम और लिनक्स सिस्टम प्रशासक गाइड


5

इस थ्रेड पर आने वाले किसी भी व्यक्ति के लिए क्योंकि आप एक समाधान की तलाश कर रहे हैं कि आप किसी एप्लिकेशन को कैसे कॉन्फ़िगर कर सकते हैं /var/runताकि यह निर्देशिका बना सके ताकि वह इसे जुर्राब या पीआईडी ​​फ़ाइल या जो कुछ भी संग्रहीत कर सके ... यहां एक उदाहरण है। मैं इस धागे के पार आया क्योंकि मैं 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 / (और यदि हां, तो कौन सी स्क्रिप्ट ऐसा करता है), या प्रत्येक फ़ोल्डर अलग-अलग, या क्या कॉपी किया गया है?

फ़ाइल पदानुक्रम मानक में परिभाषित के रूप में /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 पर)
Sandman4

यहां यह भी देखें कि / var / run वास्तव में tmpfs askubuntu.com/questions/57297/… है
Sandman4

-2

डॉउग्रो बिल्कुल सही है, / var / run को tmpfs के रूप में रखा गया है, और / var / run एक सिमिलिंक टू / रन है, जो रिबूट में लगातार बना रहता है, इसलिए जो कुछ भी / run में जाता है, वह भी (in और in / var / में) दिखाई देगा। Daud।

तो किसी भी बूट सेवाओं जैसे कि mysqld, जो एक डेमन है जो बूट समय पर शुरू की जाती है, जो / / रन में फाइल बनाती है, उसमें / var / run (सिमलिंक / रन याद) के लिए भी दिखाई देने वाली फाइलें होंगी। यदि आप ऐसी फ़ाइल बनाना चाहते हैं जो / var / run में रिबूट के माध्यम से बनी रहेगी, तो इसे / run में बनाएँ और फिर रिबूट करें।

उम्मीद है कि यह आपके प्रश्न का उत्तर देगा।


3
आप दोनों गलत हैं, या गैर-मानक सेटअप का उपयोग कर रहे हैं। खुद के लिए जाँच करें। माउंट | grep / run .... tmpfs on / run type tmpfs
Steven K

1
"यदि आप एक ऐसी फ़ाइल बनाना चाहते हैं जो / var / run में रिबूट के माध्यम से बनी रहेगी, तो इसे / run और फिर लूट में बनाएँ।" वह सही नहीं है। tmpfsअस्थिर है और परिवर्तन खो गए हैं।
ओरतंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.