बूट पर / var / run के तहत एक निर्देशिका बनाएं


39

मेरे पास एक डेमन था, जिसे /var/runपीआईडी ​​फाइल के लिए डीआरएन के उपयोगकर्ता को दी गई अनुमति के साथ अपनी स्वयं की डीआईआर की आवश्यकता थी ।

मैंने पाया कि मैं इन आदेशों के साथ यह dir बना सकता हूं:

# mkdir /var/run/mydaemon

तब मैं उपयोगकर्ता / समूह के लिए अपना स्वामित्व बदल सकता था जिसके तहत मैं इस प्रक्रिया को चलाना चाहता था:

# chown myuser:myuser /var/run/mydaemon

लेकिन जब भी मैं रिबूट जारी करता हूं तो यह डियर हो जाता है! हर बार मशीन के बूट बनाने के लिए मुझे यह डायर कैसे मिलता है?

जवाबों:


56

सिस्टम बनाने के लिए दो विकल्प निर्देशिकाओं को बनाते हैं, आमतौर पर सबसे आसान है कि RuntimeDirectoryआप अपनी सेवा की इकाई फ़ाइल में घोषणा करें:

RuntimeDirectory=, RuntimeDirectoryMode= निर्देशिका नामों की एक सूची लेता है। यदि सेट किया जाता है, तो निर्दिष्ट नाम से एक या एक से अधिक निर्देशिकाएँ /run(सिस्टम सेवाओं के लिए) या $ XDG_RUNTIME_DIR (उपयोगकर्ता सेवाओं के लिए) के नीचे बनाई जाएंगी जब इकाई शुरू की जाती है, और इकाई बंद होने पर हटा दी जाती है। निर्देशिका में पहुंच मोड निर्दिष्ट RuntimeDirectoryMode=होगा, और इसमें निर्दिष्ट उपयोगकर्ता और समूह का स्वामित्व होगा User=और Group=। यूनिट की एक या अधिक रनटाइम निर्देशिकाओं का प्रबंधन करने के लिए इसका उपयोग करें और अपने जीवनकाल को डेमन रनटाइम से बांधें। निर्दिष्ट निर्देशिका नाम सापेक्ष होना चाहिए, और इसमें "शामिल नहीं" हो सकता है/", यानी बनाने या हटाने के लिए सरल निर्देशिकाओं का उल्लेख करना चाहिए। यह विशेष रूप से अनपढ़ डेमॉन के लिए उपयोगी है जो विशेषाधिकारों की कमी के कारण रनटाइम निर्देशिकाओं को नहीं बना सकते हैं, या यह सुनिश्चित करने के लिए कि रनटाइम निर्देशिका उपयोग के बाद स्वचालित रूप से साफ हो जाती है।

या रनटाइम निर्देशिकाओं के लिए जिन्हें अधिक जटिल या विभिन्न कॉन्फ़िगरेशन या आजीवन गारंटी की आवश्यकता होती है, का उपयोग करें tmpfiles.dऔर अपने पैकेज को फ़ाइल ड्रॉप करें /usr/lib/tmpfiles.d/mydaemon.conf:

 #Type Path            Mode UID      GID    Age Argument
 d     /run/mydaemon   0755 myuser myuser   -   -

मैंने बाद का उपयोग किया क्योंकि वास्तविक डेमॉन इसका उपयोग करता है systemd-sysv-generatorऔर मुझे सप्ताह के लिए पर्याप्त सीखने की अवस्था है। बस वह एक .conf फ़ाइल और वह एक लाइन।
फीलिन

मैं पहले से ही बाद मेरे में परिभाषित किया है /usr/lib/tmpfiles.d/php7.3-fpm.confऔर /usr/lib/tmpfiles.d/php7.2-fpm.confऔर यह अभी भी पैदा नहीं करता /run/phpनिर्देशिका।
MarthM

3

मैंने एक ऐसी सेवा बनाई, जो शुरुआत में dir बनाएगी:

vim /etc/systemd/system/mydaemon-helper.service

की सामग्री /etc/systemd/system/mydaemon-helper.service:

[Unit]
Description=MyDaemon Helper Simple Service
After=network.target

[Service]
Type=simple
ExecStartPre=-/usr/bin/mkdir /var/run/mydaemon
ExecStart=/usr/bin/chown myuser:myuser /var/run/mydaemon
Restart=on-abort


[Install]
WantedBy=multi-user.target

फिर मैंने यह सेवा शुरू की:

systemctl start mydaemon-helper

systemctl status mydaemon-helper

आउटपुट:

[root@alpha etc]# systemctl status mydaemon-helper.service
● mydaemon-helper.service - MyDaemon Helper Simple Service
   Loaded: loaded (/etc/systemd/system/mydaemon-helper.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

May 28 20:53:50 alpha systemd[1]: Starting MyDaemon Helper Simple Service...
May 28 20:53:50 alpha systemd[1]: Started MyDaemon Helper Simple Service.

अंत में मैंने सिस्टम को स्टार्टअप पर लोड करने के लिए कहा:

systemctl enable mydaemon-helper


ठीक है, मुझे लगता है कि मुझे इस तरह के एक noob पर विचार करते हुए मुझे अपने सवाल में रखना चाहिए था। मैं हालांकि सीख रहा हूँ - आप लोगों को धन्यवाद!
user24601

2
नहीं, जवाब बनाना सही काम था, इसलिए लोग इस पर टिप्पणी कर सकते हैं और इसलिए यह आपके सवाल को टाल नहीं सकता है। अपने स्वयं के प्रश्नों का उत्तर देना एसओ पर स्पष्ट रूप से प्रोत्साहित करता है। और आपका जवाब गलत भी नहीं है, यह सिर्फ इतना है कि ऐसा करने के बहुत बेहतर तरीके हैं, इसलिए आईएमओ को आपको कम नहीं करना चाहिए था। इसे उखाड़ा भी नहीं जाना चाहिए। :)
ब्रायन लार्सन

2
हालांकि अबRuntimeDirectory ऐसा करने का एक बेहतर तरीका है , मैं एक पुराने संस्करण (208) के साथ सर्वर में चला गया, जहां यह निर्देश मौजूद नहीं है, इसलिए यह उत्तर एकमात्र समाधान है।
क्यूबेरिक

यह अभी भी ऐसा करने का तरीका प्रतीत होता है यदि आपको सेवा उपयोगकर्ता की तुलना में एक अलग उपयोगकर्ता द्वारा बनाई गई और स्वामित्व वाली निर्देशिका की आवश्यकता होती है, या निर्देशिका रिबूट होने तक बनी रहती है, या निर्देशिका को कई सेवाओं के बीच साझा किया जाता है।
पर्किन्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.