Script Cron versus Background
É claro que a primeira coisa que surge na mente é usar cron
. Se você usa cron ou um pequeno script em segundo plano, é principalmente uma questão de gosto.
A vantagem do cron é que ele se conecta a um processo existente (embora um script adicione, na verdade, nada à carga do processador).
A vantagem de um script em segundo plano é que é mais flexível; basta matá-lo e executá-lo com outros argumentos, se desejar alterar o tempo ou outras configurações. Você também pode reutilizá-lo com outros aplicativos sem precisar fazer outra configuração, apenas um comando é suficiente.
O script abaixo pode ser executado pelo comando (por exemplo)
python3 <script> <command_to_run_application> <cycle_time> <application_run_time> force
Onde o último argumento, se definido, mata forçosamente o aplicativo. Se não estiver definido, o aplicativo será fechado normalmente, para garantir que possíveis alterações etc. não sejam perdidas.
O script
#!/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)
Usar
Executando aplicativos com argumentos
Se você executar um aplicativo com argumentos, use aspas ao redor do comando para executar o aplicativo , por exemplo:
python3 /path/to/cycle_run.py 'gedit /home/jacob/Desktop/test.sh' 30 5
Aplicativos em execução minimizados ou na bandeja
Iniciar e encerrar aplicativos periodicamente geralmente será necessário apenas minimizado e / ou na bandeja. Conforme solicitado pelo OP, algumas observações sobre isso:
Se um aplicativo oferecer inicialização na bandeja a partir da linha de comando, basta usar o argumento para fazer isso. No caso de Telgram
, o argumento a ser usado é:
-startintray
embora a opção pareça não funcionar em todos os sistemas (funciona no meu), conforme mencionado aqui . Você terá que testar sua situação.
Se o aplicativo não oferecer a opção de linha de comando para inicialização minimizada ou na bandeja, sugiro usar o script (this) em combinação com o script aqui (sugiro a pid
versão -), o que tornará possível a inicialização o aplicativo minimizado.