2008-11-26 21 views
11

बंद करने से अस्थायी रूप से रोकें मेरे पास बैकअप स्क्रिप्ट है जो प्रतिदिन मेरे लिनक्स (फेडोरा 9) कंप्यूटर पर पृष्ठभूमि में चलती है। यदि बैकअप प्रगति पर है, तो कंप्यूटर बंद हो जाता है बैकअप क्षतिग्रस्त हो सकता है इसलिए मैं एक छोटी सी स्क्रिप्ट लिखना चाहूंगा जो उपयोगकर्ता को अस्थायी रूप से कंप्यूटर को रीबूट या बंद करने की क्षमता को अक्षम करता है।अस्थायी रूप से लिनक्स को

यह आवश्यक नहीं है कि स्क्रिप्ट अनिश्चित है, यह सिर्फ सिस्टम के उपयोगकर्ताओं को पता है कि बैकअप प्रगति पर है और उन्हें बंद नहीं होना चाहिए। मैंने डीबीस फ्री डेस्कटॉप पावर प्रबंधन spec पर अवरोध विधि देखी है: http://people.freedesktop.org/~hughsient/temp/power-management-spec-0.3.html लेकिन अगर सिस्टम उपयोगकर्ताओं के अनुरोध पर स्पष्ट रूप से निष्क्रिय नहीं है तो यह केवल शटडाउन को रोकता है।

क्या सी/पायथन/पर्ल या बैश में ऐसा करने का कोई आसान तरीका है?

अद्यतन: उपर्युक्त प्रश्न को स्पष्ट करने के लिए, यह एकाधिक उपयोगकर्ताओं के साथ एक मशीन है, लेकिन जो इसे कीबोर्ड/माउस में प्लग के माध्यम से अनुक्रमिक रूप से उपयोग करते हैं। मैं एक ऐसी प्रणाली की तलाश नहीं कर रहा हूं जो मुझे रूट के रूप में "हैकिंग" बंद कर दे। लेकिन एक स्क्रिप्ट जो मुझे (या कोई अन्य उपयोगकर्ता) याद दिलाती है कि बैकअप अभी भी चल रहा है जब मैं जीनोम/जीडीएम मेनू से बंद करना चुनता हूं

+0

में बताया गया है कि यह उपयोगी होगा अगर यह कह सकता है कि यह डेस्कटॉप या सर्वर है जो @ एडजस्टर के रूप में बताता है। – Brabster

उत्तर

1

एक पूर्ण समाधान की तुलना में अधिक से अधिक शुरू हुआ, आप शटडाउन को उपनाम कर सकते हैं कमांड करें, और उसके बाद

#!/bin/sh 
ps -ef|grep backupprocess|grep -v grep > /dev/null 
if [ "$?" -eq 0 ]; then 
echo Backup in progress: aborted shutdown 
exit 0 
else 
echo Backup not in progress: shutting down 
shutdown-alias -h now 
fi 

उपयोगकर्ता की पथ में शट डाउन के रूप में सहेजी गई स्क्रिप्ट का उपयोग करें। मुझे उम्मीद है कि आपके उपयोगकर्ता शटडाउन (विंडो मैनेजर आइकन/कमांड लाइन) और शायद अलग-अलग डिस्ट्रोज़ के लिए भी आविष्कार करते हैं, इस पर कुछ भिन्नता होगी।

+1

जो हमेशा काम नहीं करेगा, क्योंकि कई मामलों में शट डाउन को सीधे कहा जाता है, यानी/sbin/shutdown –

0

मैं मदद नहीं कर सकता लेकिन महसूस करता हूं कि आप यूनिक्स रूपक को गड़बड़ नहीं कर रहे हैं, और आप जो मांग रहे हैं वह एक क्लज है।

यदि कोई उपयोगकर्ता रूट के रूप में चल रहा है, तो सिस्टम को बंद करने से रूट को रोकने के लिए रूट कुछ भी नहीं कर सकता है! आप विंडो ड्रेसिंग चीजें जैसे शट डाउन यूआई को अस्पष्ट कर सकते हैं, लेकिन यह वास्तव में कुछ भी पूरा नहीं कर रहा है।

मैं यह नहीं बता सकता कि आप बहु-उपयोगकर्ता मशीन के संदर्भ में इस बारे में बात कर रहे हैं या एक मशीन को "डेस्कटॉप पीसी" के रूप में इस्तेमाल किया जा रहा है जिसमें एक कंसोल पर बैठे एक उपयोगकर्ता के साथ उपयोग किया जा रहा है। यदि यह पूर्व है, तो आपके उपयोगकर्ताओं को वास्तव में क्रेडेंशियल्स के साथ मशीन तक नहीं पहुंचना चाहिए जो दिन-प्रतिदिन की गतिविधियों के लिए सिस्टम को बंद कर सकता है। यदि यह बाद वाला है, तो मैं उपयोगकर्ताओं को शिक्षित करने की अनुशंसा करता हूं (ए) जांचें कि स्क्रिप्ट चल रही है, या (बी) एक विशेष शटडाउन स्क्रिप्ट का उपयोग करें जिसे आपने स्क्रिप्ट की प्रक्रिया के लिए चेक को निर्दिष्ट किया है और इसे समाप्त होने तक बंद करने से इनकार कर दिया है।

+0

एक बहु उपयोगकर्ता वातावरण में फ़र्मवेयर अपग्रेड पर विचार करें, जहां यादृच्छिक प्रक्रिया किसी भी कारण से आपके बॉक्स को रीबूट कर सकती है। आप बस एक अतिरिक्त नियंत्रण जोड़ना चाहते हैं। –

7

एक और प्राप्त-शुरू हुआ समाधान: शट डाउन के दौरान, सिस्टम /etc/init.d/ (या वास्तव में, /etc/rc.*/ में एक स्क्रिप्ट) में स्क्रिप्ट चलाता है, लेकिन आपको विचार मिलता है।) आप उस निर्देशिका में एक स्क्रिप्ट बना सकते हैं जो आपके बैकअप की स्थिति की जांच करता है, और बैकअप पूर्ण होने तक देरी बंद हो जाती है। या बेहतर अभी तक, यह आपके बैकअप को गहराई से बाधित करता है।

सुपर-उपयोगकर्ता इस स्क्रिप्ट (उदाहरण के लिए/sbin/halt के साथ) को काम कर सकता है, लेकिन यदि आप अपने मन को वास्तव में करने में सक्षम हैं तो आप सुपर-उपयोगकर्ता को कुछ भी करने के लिए रोक नहीं सकते हैं।

2

यदि उपयोगकर्ता गनोम/केडीई के माध्यम से बंद होने जा रहे हैं, तो इन्हें ऐसा करने से रोकता है।

http://live.gnome.org/GnomePowerManager/FAQ#head-1cf52551bcec3107d7bae8c332fd292ec2261760

+0

यह लिंक मर गया - "यह पृष्ठ अभी तक मौजूद नहीं है। आप एक नया खाली पृष्ठ बना सकते हैं, या पृष्ठ टेम्पलेट्स में से एक का उपयोग कर सकते हैं।" –

4

है आकस्मिक shutdows को रोकने के लिए molly-guard, रिबूट आदिजब तक सभी आवश्यक शर्तों को पूरा नहीं किया जाता है - शर्तों को आत्म-परिभाषित किया जा सकता है।

जैसा कि पहले से ही सुझाव दिया गया है कि आप शटडाउन प्रक्रिया के हिस्से के रूप में बैकअप संचालन भी कर सकते हैं। उदाहरण के लिए देखें this page

0

लेकिन एक स्क्रिप्ट है कि मुझे (या किसी अन्य उपयोगकर्ता) बैकअप अभी भी चल रहा है कि जब मैं Gnome/GDM मेनू

एक से शट डाउन का चयन पूरी तरह से ब्लॉक करने के लिए उपयोग कर सकते हैं polkit याद दिलाना होगा बंद/पुनरारंभ करें - लेकिन मैं ऐसी विधि नहीं ढूंढ पाया जो स्पष्ट प्रतिक्रिया प्रदान करेगी कि यह क्यों अवरुद्ध है।

/etc/polkit-1/localauthority/50-local.d/restrict-login-powermgmt.pkla काम करता है के रूप में निम्नलिखित लाइनों जोड़ना:

[Disable lightdm PowerMgmt] 
Identity=unix-user:* 
Action=org.freedesktop.login1.reboot;org.freedesktop.login1.reboot-multiple-sessions;org.freedesktop.login1.power-off;org.freedesktop.login1.power-off-multiple-sessions;org.freedesktop.login1.suspend;org.freedesktop.login1.suspend-multiple-sessions;org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions 
ResultAny=no 
ResultInactive=no 
ResultActive=no 

आप अभी भी एक पुष्टिकरण संवाद देखते हैं लेकिन वहाँ बटन पुष्टि करने के लिए नहीं हैं। बदसूरत लग रहा है, लेकिन काम करता है;)

दुर्भाग्यवश यह सभी उपयोगकर्ताओं पर लागू होता है, न कि केवल lightdm सत्र, इसलिए आपको वांछित होने पर उन्हें सफेद सूची में दूसरा नियम जोड़ना होगा।

ध्यान दें कि यह विधि जीयूआई से जारी किए गए पूरी तरह रीबूट/आदि आदेशों को ब्लॉक करती है। कमांड लाइन से रीबूट/आदि कमांड को अवरुद्ध करने के लिए, https://askubuntu.com/questions/17187/disabling-shutdown-command-for-all-users-even-root-consequences/17255#17255

संबंधित मुद्दे