Cron contro script di sfondo
Naturalmente la prima cosa che viene in mente è usare cron
. Sia che tu usi cron o un piccolo script in background è principalmente una questione di gusti.
Il vantaggio di cron è che si collega a un processo esistente (anche se uno script aggiunge, in realtà, nulla al carico del processore).
Il vantaggio di uno script in background è che è più flessibile; basta ucciderlo ed eseguirlo con altri argomenti se si desidera modificare il tempo o altre impostazioni. Puoi anche riutilizzarlo con altre applicazioni senza dover eseguire un'altra installazione, basta un comando.
Lo script seguente può essere eseguito dal comando (ad es.)
python3 <script> <command_to_run_application> <cycle_time> <application_run_time> force
Dove l'ultimo argomento, se impostato, uccide forzatamente l'applicazione. Se non impostato, l'applicazione verrà chiusa correttamente, per assicurarsi che eventuali modifiche, ecc. Non vengano perse.
Il copione
#!/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)
Usare
Esecuzione di applicazioni con argomenti
Se esegui un'applicazione con argomenti, assicurati di utilizzare le virgolette attorno al comando per eseguire l'applicazione , ad esempio:
python3 /path/to/cycle_run.py 'gedit /home/jacob/Desktop/test.sh' 30 5
Esecuzione di applicazioni ridotta a icona o nel vassoio
L'avvio e la chiusura periodica delle applicazioni saranno spesso necessari solo minimizzati e / o in vassoio. Come richiesto dall'OP, alcune osservazioni al riguardo:
Se un'applicazione offre l'avvio nella barra delle applicazioni dalla riga di comando, utilizzare semplicemente l'argomento per farlo. Nel caso di Telgram
, l'argomento da usare è:
-startintray
anche se l'opzione sembra non funzionare su tutti i sistemi (lo fa sul mio), come menzionato qui . Dovrai testare nella tua situazione.
Se l'applicazione non offre l'opzione della riga di comando per l'avvio ridotto a icona o nella barra delle applicazioni, suggerirei di utilizzare lo script (this) in combinazione con quello qui (suggerirei la pid
- versione), che consentirà l'avvio l'applicazione ridotta a icona.