Cron contre script d'arrière-plan
Bien sûr, la toute première chose qui vient à l'esprit est d'utiliser cron
. Que vous utilisiez cron ou un petit script d'arrière-plan est principalement une question de goût.
L'avantage de cron est qu'il se connecte à un processus existant (bien qu'un script n'ajoute en fait rien à la charge du processeur).
L'avantage d'un script d'arrière-plan est qu'il est plus flexible; tuez-le simplement et exécutez-le avec d'autres arguments si vous souhaitez modifier l'heure ou d'autres paramètres. Vous pouvez également le réutiliser avec d'autres applications sans avoir à refaire une configuration, une simple commande suffit.
Le script ci-dessous peut être exécuté par la commande (par exemple)
python3 <script> <command_to_run_application> <cycle_time> <application_run_time> force
Où le dernier argument, s'il est défini, tue de force l'application. S'il n'est pas défini, l'application se fermera normalement, pour s'assurer que les modifications éventuelles, etc. ne seront pas perdues.
Le scénario
#!/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)
Utiliser
Exécution d'applications avec des arguments
Si vous exécutez une application avec des arguments, assurez-vous d'utiliser des guillemets autour de la commande pour exécuter l'application , par exemple:
python3 /path/to/cycle_run.py 'gedit /home/jacob/Desktop/test.sh' 30 5
Exécution d'applications minimisées ou dans le bac
Le démarrage et l'arrêt des applications périodiquement seront souvent nécessaires seulement minimisés et / ou dans le bac. Comme demandé par OP, quelques remarques à ce sujet:
Si une application propose de démarrer dans le bac à partir de la ligne de commande, utilisez simplement l'argument pour le faire. Dans le cas de Telgram
, l'argument à utiliser est:
-startintray
bien que l'option ne semble pas fonctionner sur tous les systèmes (elle fonctionne sur le mien), comme mentionné ici . Vous devrez tester dans votre situation.
Si l'application n'offre pas l'option de ligne de commande au démarrage minimisé ou dans le bac, je suggère d'utiliser le (ce) script en combinaison avec celui ici (je suggère la pid
version -), ce qui permettra le démarrage l'application minimisée.