इस उपयोगकर्ता zgoda द्वारा answer पर बनाता है। यह मुख्य रूप से लॉक फ़ाइल में लेखन पहुंच के साथ एक मुश्किल चिंता को संबोधित करता है। विशेष रूप से, यदि लॉक फ़ाइल को पहली बार root
द्वारा बनाया गया था, तो उपयोगकर्ता foo
उपयोगकर्ता foo
के लिए लिखने की अनुमतियों की अनुपस्थिति के कारण इस फ़ाइल को फिर से लिखने का कोई सफलतापूर्वक प्रयास नहीं कर सकता है। लगता है कि स्पष्ट समाधान फाइल को हर किसी के लिए लिखने की अनुमति के साथ बनाना है। यह समाधान मेरे द्वारा अलग-अलग answer पर भी बनाता है, इस तरह की कस्टम अनुमतियों के साथ फ़ाइल बनाने के लिए। वास्तविक दुनिया में यह चिंता महत्वपूर्ण है जहां आपका प्रोग्राम root
सहित किसी भी उपयोगकर्ता द्वारा चलाया जा सकता है।
import fcntl, os, stat, tempfile
app_name = 'myapp' # <-- Customize this value
# Establish lock file settings
lf_name = '.{}.lock'.format(app_name)
lf_path = os.path.join(tempfile.gettempdir(), lf_name)
lf_flags = os.O_WRONLY | os.O_CREAT
lf_mode = stat.S_IWUSR | stat.S_IWGRP | stat.S_IWOTH # This is 0o222, i.e. 146
# Create lock file
# Regarding umask, see https://stackoverflow.com/a/15015748/832230
umask_original = os.umask(0)
try:
lf_fd = os.open(lf_path, lf_flags, lf_mode)
finally:
os.umask(umask_original)
# Try locking the file
try:
fcntl.lockf(lf_fd, fcntl.LOCK_EX | fcntl.LOCK_NB)
except IOError:
msg = ('Error: {} may already be running. Only one instance of it '
'can run at a time.'
).format('appname')
exit(msg)
ऊपर कोड की एक सीमा यह है कि अगर ताला फ़ाइल पहले से ही अप्रत्याशित अनुमति के साथ ही अस्तित्व में, उन अनुमतियों को सही नहीं किया जाएगा।
मुझे लॉक फ़ाइल के लिए निर्देशिका के रूप में /var/run/<appname>/
का उपयोग करना पसंद होगा, लेकिन इस निर्देशिका को बनाने के लिए root
अनुमतियां आवश्यक हैं। आप किस निर्देशिका का उपयोग करने के लिए अपना निर्णय ले सकते हैं।
ध्यान दें कि लॉक फ़ाइल में फ़ाइल हैंडल खोलने की कोई आवश्यकता नहीं है।
स्रोत
2013-02-22 04:18:27
सम्मेलन से, यह/var/run/के अंतर्गत जाना चाहिए, सही? –
जिज्ञासा से बाहर, विशेष रूप से फ़ाइल को खोलने के लिए फ़ाइल को म्यूटेक्स का काम नहीं करता है? – Menkboy
मेनकबॉय, यदि फ़ाइल दुर्घटना की स्थिति में ठीक से बंद है, तो मुझे लगता है कि चीजों को पूरी तरह से सरल और सरल बनायेगा। धन्यवाद। –