Cron versus Hintergrundskript
Natürlich ist das allererste, was einem in den Sinn kommt, die Verwendung cron
. Ob Sie Cron oder ein kleines Hintergrundskript verwenden, ist hauptsächlich Geschmackssache.
Der Vorteil von cron besteht darin, dass es sich an einen vorhandenen Prozess anschließt (obwohl ein Skript der Prozessorlast eigentlich nichts hinzufügt ).
Der Vorteil eines Hintergrundskripts besteht darin, dass es flexibler ist. Beenden Sie es einfach und führen Sie es mit anderen Argumenten aus, wenn Sie die Zeit- oder andere Einstellungen ändern möchten. Sie können es auch mit anderen Anwendungen wiederverwenden, ohne ein anderes Setup durchführen zu müssen. Nur ein Befehl reicht aus.
Das folgende Skript kann mit dem Befehl (z.
python3 <script> <command_to_run_application> <cycle_time> <application_run_time> force
Wenn das letzte Argument gesetzt ist, wird die Anwendung mit Gewalt beendet . Wenn nicht festgelegt, wird die Anwendung ordnungsgemäß geschlossen, um sicherzustellen, dass mögliche Änderungen usw. nicht verloren gehen.
Das Skript
#!/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)
Benutzen
Ausführen von Anwendungen mit Argumenten
Wenn Sie eine Anwendung mit Argumenten ausführen, stellen Sie sicher, dass Sie Anführungszeichen um den Befehl verwenden, um die Anwendung auszuführen , z.
python3 /path/to/cycle_run.py 'gedit /home/jacob/Desktop/test.sh' 30 5
Ausführen von Anwendungen minimiert oder in der Taskleiste
Das regelmäßige Starten und Beenden von Anwendungen wird häufig nur minimiert und / oder in der Ablage benötigt. Auf Wunsch des OP einige Anmerkungen dazu:
Wenn eine Anwendung das Starten in der Taskleiste über die Befehlszeile anbietet, verwenden Sie dazu einfach das Argument. Im Fall von Telgram
lautet das zu verwendende Argument:
-startintray
obwohl die Option nicht auf allen Systemen zu funktionieren scheint (auf meinen), wie hier erwähnt . Sie müssen in Ihrer Situation testen.
Wenn die Anwendung nicht die Befehlszeilenoption zum minimierten oder in der Taskleiste befindlichen Start bietet, würde ich empfehlen, das (dieses) Skript in Kombination mit dem hier beschriebenen (ich würde die pid
- Version vorschlagen ) zu verwenden, um das Starten zu ermöglichen Die Anwendung wurde minimiert.