हर 30 मिनट में सिस्टेम के साथ स्क्रिप्ट चलाएँ


20

मैं सिस्टम में बूट करने के बाद हर 30 मिनट में एक स्क्रिप्ट निष्पादित करना चाहता हूं। मुझे पता है कि आप क्रॉन का उपयोग कर सकते हैं, लेकिन मैं इस सुविधा का उपयोग करने की योजना नहीं बना रहा हूं इसलिए मैं इसे सिस्टमड के साथ आजमाना चाहूंगा।

अब तक मैंने केवल मोनोटोनिक टाइमर पाया है जो एक बार किसी चीज़ को निष्पादित करने की अनुमति देता है (कम से कम मुझे ऐसा लगता है)। कैसे होगा foo.timerऔर foo@user.serviceकी तरह लग रहे मामले में मैं कुछ बूट / प्रणाली शुरू से ही हर 30 मिनट पर अमल करना चाहते थे?

foo@user.service

[Unit]
Description=run foo
Wants=foo.timer

[Service]
User=%I
Type=simple
ExecStart=/bin/bash /home/user/script.sh

foo.timer

[Unit]
Description=run foo

[Timer]
where I am stuck... ???

जवाबों:


26

आपको दो फ़ाइलों को बनाने की आवश्यकता है: एक सेवा के लिए, दूसरा उसी नाम के टाइमर के लिए।

उदाहरण:

/etc/systemd/system/test.service

[Unit]
Description=test job

[Service]
Type=oneshot
ExecStart=/bin/bash /tmp/1.sh

/etc/systemd/system/test.timer

[Unit]
Description=test

[Timer]
OnUnitActiveSec=10s
OnBootSec=10s

[Install]
WantedBy=timers.target

उसके बाद कमांड का उपयोग करके सिस्टम को फिर से लोड करें systemctl daemon-reloadऔर अपने टाइमर को शुरू करें systemctl start test.timer, या डिफ़ॉल्ट रूप से उन्हें सक्षम करें।

की सामग्री का परीक्षण करें 1.sh

#!/bin/bash
echo `date` >> /tmp/2

और सभी उपलब्ध टाइमर की जांच करने की कमान: systemctl list-timers --all

प्रोजेक्ट पेज पर अधिक विस्तृत जानकारी और ArchLinux पेज पर उदाहरण


systemd लिपियों को स्वीकार करता है और इसे सूचीबद्ध किया जाता है, हालांकि कुछ भी नहीं हो रहा है
TomTom

कौनसा? दो स्क्रिप्ट, एक टाइमर और दूसरी सर्विस होनी चाहिए। समय, जब उन्हें निष्पादित किया गया था, सूची-टाइमर्स कमांड द्वारा जाँच की जा सकती है, संभावित त्रुटियों की जाँच की जा सकती है systemctl status test.timerऔर systemctl status test.serviceकॉमाँड
Reishin

1
कृपया systemctl list-timers --allकमांड का उपयोग करें और आउटपुट की जांच करें। उन्होंने कहा कि जैसे होने की जरूरत है इस । इकाई, बाएँ और गुज़रे हुए स्तंभों को देखें। यदि टाइमर मौजूद है, तो कृपया अपनी सेवा फ़ाइल को देखें और सामान्य रूप से काम कर रहे टाइमर के बाद से बग की जांच करें।
रीशिन

1
नहीं, coz मुख्य प्रश्न "सूचना-भेजें" के बारे में कुछ नहीं पूछता है और मुझे लगता है कि हमें इस तरह के विषय के पहले से ही दो अलग-अलग चीजों को नहीं मिलाना चाहिए । अपने मामले में, export DISPLAY=:0.0स्क्रिप्ट में जोड़ने का प्रयास करें ।
रईशिन

1
ps: मैन systemd.timer के अनुसार Persistent = true केवल OnCalendar (यानी
Wallclock

11

यहां आपके टाइमर का उपयोग किए बिना एक और विकल्प है। यदि समय बहुत महत्वपूर्ण नहीं है और स्क्रिप्ट लंबे समय तक नहीं चल रही है तो यह साधारण चीजों के लिए ठीक रहेगा।

[Unit]
Description=Run foo

[Service]
User=%I
Restart=always
RestartSec=1800s
ExecStart=/bin/bash /home/user/script.sh

2
मुझे यह समाधान पसंद है। एकमात्र मुख्य दोष यह है कि सिस्टम लॉग "प्रारंभ <सेवा X>" लॉग से भरा जाएगा यदि आप अक्सर (प्रत्येक 30 सेकंड में) पुनरारंभ करते हैं। किस बिंदु पर सिस्टम को सेवा से शुरू करने के बजाय सेवा को डेमॉन के रूप में चलाना बेहतर हो सकता है।
जर्सी बीन

यह सच है। त्वरित और सरल सामान के लिए यह काम करता है। लेकिन टाइमर या लंबे समय तक चलने वाली स्क्रिप्ट एक बेहतर समाधान होगा।
घंटे पर मैट एच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.