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