सीधे कंटेंट पर जाएँ
ToolMug

↑ ↓ से चुनें, Enter से खोलें, Esc से बंद करें।

systemd सर्विस फ़ाइल जनरेटर

Linux सर्वर पर Node.js, Python या Go प्रोग्राम को चलाए रखें, बूट पर शुरू करें और क्रैश होने पर दोबारा चलाएँ — systemd के हर विकल्प को याद रखे बिना। कमांड और यूज़र भरें, रीस्टार्ट नीति और एनवायरनमेंट वेरिएबल चुनें, और .service फ़ाइल को उसे इंस्टॉल व शुरू करने वाली कमांड के साथ कॉपी करें। cron के आधुनिक विकल्प के रूप में .timer पाने के लिए “शेड्यूल पर चलाएँ” चुनें।

आपके ब्राउज़र में चलता है — आपका डाला गया कुछ भी अपलोड नहीं होता

यही फ़ाइल का नाम बनेगा, जैसे myapp → myapp.service

प्रोग्राम का पूरा पाथ दें, जैसे /usr/bin/python3 app.py

कमांड फ़ोरग्राउंड में चलती रहती है (ज़्यादातर वेब ऐप और स्क्रिप्ट)।

हर लाइन में एक KEY=value लिखें; स्पेस वाले मानों पर कोट अपने-आप लग जाते हैं।

0 से सिस्टम का डिफ़ॉल्ट बना रहता है।

myapp.service

इंस्टॉल करें और शुरू करें

कमांड सर्वर पर root के रूप में पेस्ट करें। यूनिट फ़ाइल बदलने के बाद systemctl daemon-reload फिर से चलाएँ। लॉग: journalctl -u <name>।

कैसे इस्तेमाल करें

  1. सर्विस का नाम, पूरे पाथ वाली कमांड और वर्किंग डायरेक्टरी डालें।
  2. यूज़र, रीस्टार्ट नीति और ज़रूरी एनवायरनमेंट वेरिएबल तय करें।
  3. चाहें तो बुनियादी सुरक्षा सख़्ती या टाइमर बनाने के लिए शेड्यूल (OnCalendar) जोड़ें।
  4. बनी हुई फ़ाइलें कॉपी करें, या इंस्टॉल कमांड को सर्वर के root शेल में पेस्ट करें।

विकल्पों की जानकारी

Type
simple उन प्रोग्राम के लिए है जो फ़ोरग्राउंड में बने रहते हैं; oneshot उन स्क्रिप्ट के लिए है जो एक ही बार चलती हैं, जैसे शेड्यूल्ड जॉब।
Restart
“विफल होने पर” सर्विस को तब दोबारा चलाता है जब वह त्रुटि के साथ बंद हो या क्रैश हो; “हमेशा” सामान्य रूप से बंद होने पर भी उसे दोबारा चलाता है।
OnCalendar
टाइमर कब चले, जैसे daily या हर दिन रात 3 बजे के लिए *-*-* 03:00:00। एक्सप्रेशन को systemd-analyze calendar से जाँचें।

उदाहरण: टाइमर के रूप में रात की जॉब

हर रात 3 बजे एक स्क्रिप्ट चलाने के लिए, कमांड (ExecStart) को /usr/local/bin/backup.sh, सर्विस का नाम backup, Type को oneshot और Restart को «कभी नहीं» सेट करें, फिर «शेड्यूल पर चलाएँ (.timer बनाएँ)» और «बुनियादी सुरक्षा सख़्ती (नई अनुमतियाँ नहीं, निजी /tmp, रीड-ओनली सिस्टम)» पर टिक करें। डिफ़ॉल्ट यूज़र और वर्किंग डायरेक्टरी के साथ जनरेटर दो फ़ाइलें बनाता है। backup.service:

[Unit]
Description=Nightly backup

[Service]
Type=oneshot
User=www-data
WorkingDirectory=/srv/myapp
ExecStart=/usr/local/bin/backup.sh
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=read-only

और backup.timer:

[Unit]
Description=Run backup on a schedule

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
Unit=backup.service

[Install]
WantedBy=timers.target

टाइमर चालू होने पर दो चीज़ें बदलती हैं। सर्विस फ़ाइल का [Install] सेक्शन हट जाता है, क्योंकि उसे टाइमर शुरू करता है, और इंस्टॉल कमांड सर्विस के बजाय टाइमर को enable करती हैं:

sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
systemctl list-timers backup.timer
journalctl -u backup.service -f

टाइमर विकल्प पर टिक करने पर Type आपके लिए नहीं बदलता, इसलिए जो जॉब ख़त्म हो जाती हैं उनके लिए oneshot ख़ुद चुनें। Restart «हमेशा» के साथ oneshot सर्विस वैध नहीं है, इसलिए जनरेटर Restart छोड़ देता है और चेतावनी दिखाता है।

अक्सर पूछे जाने वाले सवाल

फ़ाइल कहाँ रखूँ?

/etc/systemd/system/ में। फिर systemctl daemon-reload और systemctl enable --now <name>.service चलाएँ — बनाई गई कमांड यह सब कर देती हैं।

मेरी सर्विस “Executable path is not absolute” के साथ क्यों फ़ेल होती है?

पुराने systemd वर्ज़न को ExecStart में प्रोग्राम का पूरा पाथ चाहिए। उसे which से खोजें, जैसे which node।

टाइमर या cron?

टाइमर जर्नल में लॉग करते हैं, सर्वर बंद रहने के दौरान छूटे रन को बाद में चला सकते हैं, और एक साथ दो बार नहीं चलते। एक लाइन के काम के लिए cron ज़्यादा सरल है और अब भी ठीक चलता है।

प्राइवेसी

यह टूल पूरी तरह आपके ब्राउज़र में चलता है। आपकी फ़ाइलें और टेक्स्ट आपके डिवाइस पर ही प्रोसेस होते हैं और हमारे सर्वर पर कभी अपलोड नहीं होते।

मिलते-जुलते टूल