Systemd के साथ इसे कैसे करें (यह आसान है)
अब जब उबंटू वेरिएंट और मिंट सिस्टमड में चले गए हैं तो मैंने पाया कि मेरे पुराने समाधान ऊपर के आधार पर कम संतोषजनक हैं। मैंने यह पता लगाने के लिए वेब के चारों ओर खोज की कि इसे सिस्टमड के साथ कैसे किया जाए और दूसरों के ज्ञान के संयोजन को समाप्त करने और इसे ब्लॉगस्पॉट.कॉम पर एक ब्लॉग पोस्ट के रूप में प्रलेखित करने के लिए। निम्नलिखित ट्यूटोरियल युक्त।
सिस्टमड के साथ आप नीचे दिए गए टेम्प्लेट का उपयोग करके अपनी स्क्रिप्ट को कॉल करने के लिए एक या दो फाइल बनाते हैं, और कुछ कमांड को निष्पादित करते हैं। सरल।
जीयूआई संस्करण
स्टार्टअप और / या शटडाउन में आप जो स्क्रिप्ट चलाना चाहते हैं उसे पहले बनाएं। यदि आपको दोनों की आवश्यकता नहीं है तो बस एक करें। मैंने बनाया .scopening_atstart और .scfullcopy_atend।
फिर सुनिश्चित करें कि वे फ़ाइल को राइट क्लिक करके, संपत्तियों का चयन करके और अनुमतियों के तहत, सुनिश्चित करें कि आपने प्रोग्राम के रूप में फ़ाइल निष्पादित करने की अनुमति दी है।
जिन दो फाइलों को मैंने बनाया है, वे एक रैमडिस्क की सामग्री को पॉप्युलेट और सेव करती हैं। वे यह साबित करने के लिए मेरे होम डायरेक्टरी में एक फ़ाइल भी बनाते हैं कि सेवा काम कर रही है। वे फार्म के थे:
#!/bin/sh
cp -pru /home/john/zRamdisk/subdirectory1/* /home/john/.wine/drive_c/subdirectory1/
rm /home/john/stop_time
date +%D' '%T > /home/john/stop_time
फिर मैंने अपने फ़ाइल प्रबंधक को रूट के रूप में खोला, खोला /etc/systemd/system
और एक फ़ाइल स्टार्टअप बनाया। सेव और एक फ़ाइल save-ramdisk.service। जाहिर है आप अपने खुद के नाम चुन सकते हैं और जेनेरिक नामों में johns_start.service नामक एक स्टार्टअप फ़ाइल और johns_shutdown.service नामक एक शटडाउन फ़ाइल शामिल हो सकती है। बस मौजूदा सेवा नामों को न चुनें।
[Unit]
Description=Startup Applications
[Service]
Type=oneshot
RemainAfterExit=false
ExecStart=/home/john/.scopening_atstart
[Install]
WantedBy=multi-user.target
तथा
[Unit]
Description=Save Ramdisk to Wine drive C
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/john/.scfullcopy_atend
[Install]
WantedBy=multi-user.target
आप एक ही सेवा फ़ाइलों का उपयोग कर सकते हैं, मेरा निष्पादन योग्य स्क्रिप्ट का पूरा रास्ता मेरा के लिए।
आखिरकार में हर एक के लिए कमांड systemctl आपके_files_name को सक्षम करता है (लेकिन प्रत्यय सेवा के बिना)। तो मेरा पहला थाsystemctl enable startup
सेवाओं को शुरू करने के लिए कंप्यूटर को एक बार रिबूट करें। जब भी सिस्टमड मल्टी-यूजर टारगेट में प्रवेश करता है और जब वह मल्टी-यूजर टारगेट से बाहर निकलता है तो स्टॉप सर्विस शुरू कर देता है। विभिन्न सक्रियण स्थितियों के साथ वैकल्पिक सेवा फाइलें नीचे वर्णित की जाएंगी।
अतिरिक्त उपयोगी कमांड में शामिल हैं:
systemctl इनेबल्ड स्टार्टअप
systemctl है-सक्रिय स्टार्टअप
systemctl रीस्टार्ट स्टार्टअप
अधिक संदर्भ के संदर्भ में पाया जा सकता है।
CLI (कमांड लाइन) संस्करण
यह वर्णन मानता है कि आप अपने घर निर्देशिका से संचालित करते हैं / घर / जॉन के बजाय, आवश्यकतानुसार sudo का उपयोग करते हैं, और संपादक की आपकी पसंद जहां मैं vim या svim लिखता हूं।
पहली पंक्ति के साथ स्टार्टअप और शटडाउन स्क्रिप्ट बनाएं और #!/bin/sh
उनका उपयोग करके निष्पादन योग्य बनाएं chmod +x my_new_filename
।
ऊपर के रूप में दो फ़ाइलें बनाएँ , या इस उदाहरण में, स्टार्टअप और शटडाउन कार्यों को संभालने के लिए एक फ़ाइल। मैं अपने होम डायरेक्टरी में स्क्रिप्ट निष्पादित करूंगा लेकिन @don_crissti स्टैक एक्सचेंज में कुछ विकल्प दिखाता है ।
svim /etc/systemd/system/start_and_stop.service
और फ़ाइल सामग्री में कॉपी करें:
[Unit]
Description=Run Scripts at Start and Stop
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/home/john/.startup_commands #your paths and filenames
ExecStop=/home/john/.shutdown_commands
[Install]
WantedBy=multi-user.target
फिर कमांड के साथ सेवा को सक्षम करें :
systemctl enable start_and_stop
और अपने सिस्टम को रिबूट करें जिसके बाद सेवाएं सक्रिय होंगी। आदेश systemctl is-enabled start_and_stop
और systemctl is-active start_and_stop
आपकी नई सेवाओं की निगरानी में उपयोग किया जा सकता है।
शटडाउन के लिए ट्रिगर की स्थितियां बदलना
स्क्रिप्ट चलाने के लिए आरंभ करने के लिए सभी उपर की फाइलें मल्टी-उपयोगकर्ता वातावरण के खुले या बंद का उपयोग करती हैं। नीचे दी गई फ़ाइल अपनी स्क्रिप्ट आरंभ करने के लिए चार संभावित शटडाउन प्रक्रियाओं की शुरुआत का उपयोग करती है। पिछली पंक्ति + WantedBy लाइन पर लक्ष्यों को जोड़ना या हटाना आपको बारीक भेद करने देगा:
यह फ़ाइल इस पोस्ट के दूसरे उत्तर में प्रस्तावित की गई थी, लेकिन जब तक मैंने एक इंस्टॉलेशन सेक्शन नहीं जोड़ा तब तक मैं इसे चलाने में असमर्थ था।
दोबारा, स्क्रिप्ट को संपादित करें /etc/systemd/service/
और इसका उपयोग करने में सक्षम करें systemctl enable your_file_name
। जब मैंने लक्ष्य का उपयोग किया तो मैंने systemclt disable file_name
कमांड का उपयोग किया और फिर इसे सक्षम किया जिसने इसे लक्ष्य निर्देशिकाओं के लिए सहानुभूति दी। रिबूट और सेवा का संचालन होगा।
[Unit]
Description=Do something required
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
# This works because it is installed in the target and will be
# executed before the target state is entered
# Also consider kexec.target
[Service]
Type=oneshot
ExecStart=/home/john/.my_script #your path and filename
[Install]
WantedBy=halt.target reboot.target shutdown.target