Cron против фонового скрипта
Конечно, самое первое, что приходит в голову - это использовать 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
- версию), что позволит запустить приложение свернуто.