Cron与背景脚本
当然,进入头脑的第一件事就是使用cron
。无论您使用cron还是小型背景脚本,主要取决于您的口味。
cron的优点是它可以挂接到现有进程上(尽管脚本实际上并没有增加处理器的负载)。
后台脚本的优点是更加灵活。如果您想更改时间或其他设置,只需杀死它并与其他参数一起运行即可。您也可以将其与其他应用程序一起使用,而无需执行其他设置,仅需一条命令即可。
下面的脚本可以通过命令运行(例如)
python3 <script> <command_to_run_application> <cycle_time> <application_run_time> force
如果设置了最后一个参数,则会强制终止该应用程序。如果未设置,则应用程序将正常关闭,以确保可能发生的更改等不会丢失。
剧本
#!/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)
使用
使用参数运行应用程序
如果运行带有参数的应用程序,请确保在命令周围使用引号来运行该应用程序,例如:
python3 /path/to/cycle_run.py 'gedit /home/jacob/Desktop/test.sh' 30 5
最小化运行应用程序或将其运行在托盘中
仅在最小化和/或在托盘中经常需要定期启动和终止应用程序。根据OP的要求,对此有几点评论:
如果应用程序提供从命令行在托盘中启动,则只需使用参数即可。对于Telgram
,要使用的参数为:
-startintray
虽然选择似乎不是在所有系统上工作(它在我的),如提及这里。您将必须根据自己的情况进行测试。
如果应用程序不提供最小化启动或在托盘中启动的命令行选项,我建议将(this)脚本与此处的脚本结合使用(建议使用pid
-版本),这将使启动成为可能应用程序最小化。