मैं Ubuntu सर्वर 17.10 पर स्टार्टअप पर स्क्रिप्ट कैसे चला सकता हूं?


13

मैं Ubuntu सर्वर 17.10 मशीन पर स्टार्टअप पर स्क्रिप्ट कैसे चला सकता हूं? मुझे लगता है कि विधि 17.10 में बदल दी गई थी।

जवाबों:


14

स्क्रिप्ट को उचित उपयोगकर्ता की cronतालिका (यानी क्रॉस्टैब ) के शेड्यूल के साथ रखें @reboot

एक उपयोगकर्ता अपनी cronतालिका को इसके साथ संपादित कर सकता है crontab -e

एक उदाहरण जो /path/to/script.shस्टार्टअप पर चलेगा :

@reboot /path/to/script.sh

यदि आपको इसे रूट के रूप में चलाने की आवश्यकता है, तो उपयोग न करें @reboot sudo /path/to/script.sh; रूट के क्रॉस्टैब को संपादित
करने के sudo crontab -eu rootलिए उपयोग करें।

इन्हें भी देखें: crontab (1), cron (8), crontab (8)


2

उबंटू 15.04 और डिफ़ॉल्ट रूप से फॉरवर्ड कुछ कहा जाता है systemd, जो एक प्रोग्राम है (प्रकार का) जो स्टार्टअप सेवाओं और प्रक्रियाओं को स्वचालित करता है। आप अपना खुद का बना सकते हैं और केवल थोड़ी सी मेहनत के साथ इसे स्टार्टअप सेवाओं की सूची में जोड़ सकते हैं।

बुनियादी प्रणाली सेवा

यह एक बेयरबोन .serviceफ़ाइल है जिसका उपयोग मेरे अजगर गुई सर्वर को लॉन्च करने के लिए किया जा सकता है (यह एक शेल स्क्रिप्ट हो सकता है, यह नहीं है):

[Unit]
Description=Python GUI Server

[Service]
ExecStart=/home/pi/software/GUI_POE.py &

[Install]
WantedBy=multi-user.target

Descriptionविकल्प किसी भी स्ट्रिंग है कि वर्णित क्या सेवा है या क्या करता है।

ExecStartविकल्प आदेश पर अमल करने का उल्लेख है। यहां, मैं एक निष्पादन योग्य अजगर स्क्रिप्ट को एक रास्ता देता हूं और &इसे पृष्ठभूमि में चलाने के लिए टोकन का उपयोग करता हूं ।

WantedByविकल्प निर्दिष्ट पूर्वता, क्या लक्ष्य के आधार पर इस सेवा का उपयोग करना चाहता है। यदि आपको किसी विशिष्ट समय पर चलने के लिए आपकी सेवा की आवश्यकता नहीं है, तो बस इसे सेट करें multi-user.target

मूल प्रक्रिया

  1. nanoअपनी पसंद के या किसी संपादक का उपयोग करके आप जिस स्क्रिप्ट को स्टार्टअप पर चलाना चाहते हैं, उसे लिखें । सुनिश्चित करें कि आपने फ़ाइल के बहुत ऊपर ( #!/bin/bashबैश स्क्रिप्ट के लिए) उचित शेबंग को शामिल किया है , और इसके साथ निष्पादन योग्य अनुमति दें chmod

  2. बस my_service.service नामक फ़ाइल में अपनी सेवा लिखें, और फिर इसे उचित निर्देशन में कॉपी करें cp my_service.service /lib/systemd/system/

  3. अपने सेवा प्रारंभ करें: sudo systemctl start my_service.service। यह आपकी सेवा को चलाने के लिए जो भी स्क्रिप्ट बताए, लॉन्च करता है। स्टार्ट के बजाय "स्टॉप" वाला वही कमांड इसे बंद कर देगा।

  4. स्टार्ट-अप प्रक्रिया में अपनी सेवा जोड़ें sudo systemctl enable my_service.service:। इसे हटाने के लिए, बस "सक्षम करें" को उसी कमांड में "अक्षम" से बदलें।

और बस! ध्यान रखें कि आपकी स्क्रिप्ट स्वचालित रूप से रूट अनुमतियों के साथ चलाई जाएगी, क्योंकि यह सिस्टमड सेवाओं में डिफ़ॉल्ट है।

मेरा सरल उदाहरण (पूर्ण)

संदर्भ के लिए, यहां मेरे पास एक सरल सिस्टमड सेवा है जो डैश का उपयोग करके एक साधारण पायथन जीयूआई सर्वर लॉन्च करती है:

[Unit]
Description=Python GUI Server
After=network-online.target

[Service]
Type=simple
WorkingDirectory=/home/pi/software
ExecStart=/home/pi/software/GUI_POE.py &
Restart=always
RestartSec=15s
KillMode=process
TimeoutSec=infinity
User=pi
Group=pi

[Install]
WantedBy=multi-user.target

यह उदाहरण सेवा Python3 स्क्रिप्ट का उपयोग करती है, लेकिन सूत्र शेल स्क्रिप्ट के लिए सटीक है।

आगे पढ़ने को DigitalOcean द्वारा इस उत्कृष्ट ट्यूटोरियल में पाया जा सकता है , और यह AskUbuntu थ्रेड एक उत्कृष्ट उत्तर के साथ है जिसने मुझे सिस्टमड सीखने में मदद की। उम्मीद है की यह मदद करेगा!


2
इस प्रश्न के लिए एक व्यवस्थित परिप्रेक्ष्य लाने के लिए धन्यवाद! मुझे लगता है कि वहाँ ExecStart लाइन में पृष्ठभूमि के लिए मजबूर करने की कोई वास्तविक जरूरत नहीं है।
जेफ स्कालर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.