Крон проти фонового сценарію
Звичайно, найперше, що спливе на розум, - це використовувати cron
. Чи ви використовуєте cron або невеликий фоновий скрипт - це головним чином питання смаку.
Перевагою 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)
Використовувати
Запуск програм з аргументами
Якщо ви запускаєте програму з аргументами, обов’язково використовуйте лапки навколо команди для запуску програми , наприклад:
python3 /path/to/cycle_run.py 'gedit /home/jacob/Desktop/test.sh' 30 5
Запуск програм мінімізовано або в лотку
Періодично запускати та завершувати роботи програм потрібно буде лише мінімізувати та / або в лотку. Як вимагає ОП, кілька зауважень до цього:
Якщо програма пропонує запуск у лотку з командного рядка, просто використовуйте аргумент, щоб зробити це. У разі використання Telgram
аргументом є:
-startintray
хоча варіант, здається, працює не у всіх системах (він є в моїй), про що говорилося тут . Вам доведеться перевірити свою ситуацію.
Якщо програма не пропонує параметр командного рядка для запуску зведений до мінімуму або в лоток, я б запропонував використовувати сценарій (цей) у поєднанні з наведеним тут (я б запропонував pid
- версію), що дозволить запустити додаток зведено до мінімуму.