Is there программное обеспечение to periodically start and close an application?

Exemplary использовал вступите в брак:

I would like to start Telegram Desktop periodically every 3 hours for 15 minutes, to check for newly incoming messages. After 15 minutes, the application should close again and re-launch after the next 3 hours.

11
задан 25 December 2015 в 09:02

2 ответа

Крон по сравнению с фоновым сценарием

Конечно, самая первая вещь, которая появляется в ум, состоит в том, чтобы использовать 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 - раздел, в моем случае, скопированном с .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

Запущенные приложения минимизированы или в лотке

Запуск и завершение приложений периодически часто будут необходимы только минимизированные и/или в лотке. Согласно просьбе OP, несколькими комментариями по этому:

  • Если приложение предлагает запуск в лотке из командной строки, просто используйте аргумент, чтобы сделать так. В случае Telgram, аргумент использованию:

    -startintray
    

    хотя опция, кажется, не работает над всеми системами (она делает на моем), как упомянуто здесь. Необходимо будет протестировать в ситуации.

  • Если бы приложение не предлагает параметра командной строки для запущений минимизированный или в лотке, я предложил бы использовать (этот) сценарий в сочетании с тем здесь (я предложу pid- версия), который позволит запустить минимизированное приложение.

9
ответ дан 23 November 2019 в 04:03
  1. Редактирование Ваш крон с crontab -e и добавляют эту строку в Ваш crontab для выполнения его как задания расписания в течение каждых 3 часов

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

2. Откройте свой терминал, и тип ниже команды

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

открывают killtelegram.sh с Вашим favorate редактором и пишут, поскольку ниже

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

Сохраняют и выходят

thats это. Это откроется автоматически в течение каждых 3 Часов, и это останется в течение 15 минут, и Это будет уничтожено.

5
ответ дан 23 November 2019 в 04:03

Другие вопросы по тегам:

Похожие вопросы: