क्या किसी एप्लिकेशन को समय-समय पर शुरू करने और बंद करने के लिए सॉफ्टवेयर है?


11

अनुकरणीय उपयोग मामला:

मैं आने वाले नए संदेशों की जांच करने के लिए 15 मिनट के लिए हर 3 घंटे में टेलीग्राम डेस्कटॉप शुरू करना चाहता हूं । 15 मिनट के बाद, एप्लिकेशन को फिर से बंद करना चाहिए और अगले 3 घंटों के बाद फिर से लॉन्च करना चाहिए।


यह स्क्रिप्ट के लिए बेहद आसान होगा। क्या यह जाँच करने के लिए, आवेदन करना शुरू करेगा? यदि हां, तो इसे चलाने की आज्ञा क्या है?
याकूब व्लिजम

साथ cronआप स्पष्ट रूप से कार्यक्रमों शुरू कर सकते हैं। आप kill -15इसे क्रॉन भी कर सकते हैं , लेकिन यह एप्लिकेशन पर निर्भर करता है कि क्या यह इसे बंद करने के लिए एक सौम्य नग्नता के रूप में संभालता है, इसे अनदेखा करता है या केवल क्रैश करता है।
हराल्ड

जवाबों:


9

क्रोन बनाम बैकग्राउंड स्क्रिप्ट

बेशक सबसे पहली बात यह है कि दिमाग में पॉप का उपयोग करना है cron। चाहे आप क्रोन का उपयोग करें, या एक छोटी पृष्ठभूमि स्क्रिप्ट मुख्य रूप से स्वाद का मामला है।

क्रोन का लाभ यह है कि यह एक मौजूदा प्रक्रिया पर हुक करता है (हालांकि एक स्क्रिप्ट जोड़ता है, ठीक है, वास्तव में प्रोसेसर लोड के लिए कुछ भी नहीं है)।

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

नीचे दी गई स्क्रिप्ट को कमांड द्वारा चलाया जा सकता है (उदाहरण के लिए)

python3 <script> <command_to_run_application> <cycle_time> <application_run_time> force

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

लिपी

#!/usr/bin/env python3
import subprocess
import time
import sys

force = False
args = sys.argv[1:]; app = args[0].replace("'", "")
proc = app.split()[0].split("/")[-1]
cycle = int(args[1])*60; run = int(args[2])*60

try:
    if args[3] == "force":
        force = True
except IndexError:
    pass

def get_pid(proc_name):
    try:
        return subprocess.check_output(
            ["pgrep", proc_name]
            ).decode("utf-8").strip()
    except subprocess.CalledProcessError:
        pass

def kill(pid, force):
    if force == False:
        subprocess.Popen(["kill", "-s", "TERM", pid])
    elif force == True:
        subprocess.Popen(["kill", pid])

while True:
    subprocess.Popen(["/bin/bash", "-c", app])
    time.sleep(run)
    pid = get_pid(proc)
    if pid != None:
        kill(pid, force)
    time.sleep(cycle - run)

काम में लाना

  • स्क्रिप्ट को एक खाली फ़ाइल में कॉपी करें, इसे इस रूप में सहेजें cycle_run.py
  • इसे कमांड से चलाएँ:

    python3 /path/to/cycle_run.py <command> <cycle_time> <application_run_time> force
    

    कहाँ पे:

    • <command>एप्लिकेशन को चलाने के आदेश है (बिना --%uमेरे मामले में, -section, से नकल .desktopफ़ाइल: /home/jacob/Downloads/Telegram/Telegram)
    • <cycle_time> मिनटों में (कुल) चक्र का समय (आपके उदाहरण में 3 घंटे = 180)
    • <application_run_time> वह समय जो एप्लिकेशन को मिनटों में चलना चाहिए (आपके उदाहरण में 15)
    • forceएक वैकल्पिक तर्क है, बलपूर्वक अनुप्रयोग को मारने के लिए। बस इसे दूर इनायत आवेदन को मारने के लिए छोड़ दें ।

तर्कों के साथ आवेदन चलाना

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

python3 /path/to/cycle_run.py 'gedit /home/jacob/Desktop/test.sh' 30 5

रनिंग एप्लिकेशन कम से कम या ट्रे में

समय-समय पर अनुप्रयोगों को शुरू करना और समाप्त करना अक्सर कम से कम और / या ट्रे में आवश्यक होगा। ओपी द्वारा अनुरोध के रूप में, उस पर कुछ टिप्पणी:

  • यदि कोई एप्लिकेशन कमांड लाइन से ट्रे में शुरू होता है, तो बस ऐसा करने के लिए तर्क का उपयोग करें। Telgramउपयोग करने के लिए तर्क के मामले में है:

    -startintray
    

    हालांकि विकल्प सभी प्रणालियों पर काम नहीं करता है (यह मेरा काम करता है), जैसा कि यहां बताया गया है । आपको अपनी स्थिति में परीक्षण करना होगा।

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


प्रिय @JacobVlijm, आपके पास एक अद्भुत कौशल है! इस क्रिसमस के लिए बहुत बहुत धन्यवाद। आपकी स्क्रिप्ट बढ़िया काम करती है। "टेक ए ब्रेक" के रूप में भी, मैं इस स्क्रिप्ट को एक अच्छा, बस जीयूआई में बदलने की कल्पना कर सकता हूं, जहां उपयोगकर्ता एप्लिकेशन (एस), चक्र समय और एप्लिकेशन रन समय को परिभाषित कर सकता है। यह GUI तब टेलीग्राम या स्काइप जैसे एप्लिकेशन तैयार करने के लिए स्टार्टअप पर चल सकता था। तुम क्या सोचते हो?
orchichiro

1
@orschiro सही लगता है! कुछ बदलावों के साथ, gui उपयोग के लिए लगभग तैयार है :)। एक अच्छा क्रिसमस है!
जैकब व्लिजम

क्या अनुप्रयोगों को कम से कम या पृष्ठभूमि में खोलने के लिए मजबूर करना संभव होगा?
ऑर्किरो

@ कोर्सोइरो ऑफ कोर्स, आपके मन में क्या है?
जैकब वल्जिम

1
हाय @orschiro ने उत्तर में एक खंड जोड़ा।
जैकब व्लिजम

5
  1. अपने क्रोन को संपादित करें crontab -e और हर 3 घंटे के लिए शेड्यूल जॉब के रूप में चलाने के लिए इस लाइन को अपने कॉन्ट्राब में जोड़ें

    00 */3 * * * * ~/killtelegram.sh >/dev/null 2>&1 
    

2. अपने टर्मिनल और कमांड के नीचे टाइप करें

touch ~/killtelegram.sh
chmod +x ~/killtelegram.sh

अपने फेवरेट एडिटर के साथ opentelegram.sh खोलें और नीचे लिखें

#!/bin/bash
telegram &
sleep 15m
pkill telegram

सुरषित और बहार

बस। यह हर 3 घंटे के लिए अपने आप खुल जाएगा और यह 15 मिनट तक रहेगा और इसे मार दिया जाएगा।


हाय राजा, क्या आप इस पर वोट देने पर विचार करेंगे: askubuntu.com/tags/schedule/synonyms ?
जैकब व्लिजम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.