Cron a skrypt w tle
Oczywiście pierwszą rzeczą, która pojawia się w umyśle, jest użycie cron
. To, czy używasz crona, czy małego skryptu w tle, zależy głównie od gustu.
Zaletą crona jest to, że łączy się z istniejącym procesem (chociaż skrypt nie dodaje, cóż, właściwie nic do obciążenia procesora).
Zaletą skryptu w tle jest to, że jest bardziej elastyczny; po prostu zabij go i uruchom z innymi argumentami, jeśli chcesz zmienić ustawienia czasu lub inne. Możesz także użyć go ponownie z innymi aplikacjami bez konieczności przeprowadzania kolejnej konfiguracji, wystarczy jedno polecenie.
Poniższy skrypt można uruchomić za pomocą polecenia (np.)
python3 <script> <command_to_run_application> <cycle_time> <application_run_time> force
Gdzie ostatni argument, jeśli jest ustawiony, wymusza zabicie aplikacji. Jeśli nie zostanie ustawiony, aplikacja zamknie się z gracją, aby upewnić się, że ewentualne zmiany itp. Nie zostaną utracone.
Scenariusz
#!/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)
Używać
Uruchamianie aplikacji z argumentami
Jeśli uruchamiasz aplikację z argumentami, upewnij się, że używasz cudzysłowu wokół polecenia, aby uruchomić aplikację , np .:
python3 /path/to/cycle_run.py 'gedit /home/jacob/Desktop/test.sh' 30 5
Uruchamianie aplikacji zminimalizowane lub w zasobniku
Okresowe uruchamianie i kończenie aplikacji będzie często potrzebne tylko w zminimalizowanym zakresie i / lub w zasobniku. Zgodnie z wnioskiem OP kilka uwag na ten temat:
Jeśli aplikacja oferuje uruchomienie w zasobniku z wiersza poleceń, wystarczy użyć argumentu, aby to zrobić. W przypadku Telgram
argumentu do użycia jest:
-startintray
chociaż opcja wydaje się nie działać na wszystkich systemach (działa na moim), jak wspomniano tutaj . Będziesz musiał przetestować w swojej sytuacji.
Jeśli aplikacja nie oferuje opcji wiersza polecenia do uruchomienia zminimalizowanego lub w zasobniku, sugerowałbym użycie (tego) skryptu w połączeniu ze skryptem tutaj (sugerowałbym pid
wersję -), który umożliwi uruchomienie aplikacja zminimalizowana.