是否有软件可以定期启动和关闭应用程序?

是否有软件可以定期启动和关闭应用程序?

示例用例:

我想开始Telegram 桌面版每 3 小时定期检查一次,每次 15 分钟,以检查是否有新收到的消息。15 分钟后,应用程序应再次关闭,并在接下来的 3 小时后重新启动。

答案1

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)

使用

  • 将脚本复制到一个空文件中,另存为cycle_run.py
  • 使用以下命令运行它:

    python3 /path/to/cycle_run.py <command> <cycle_time> <application_run_time> force
    

    在哪里:

    • <command>是运行应用程序的命令(没有-section --%u,在我的情况下,是从文件复制.desktop/home/jacob/Downloads/Telegram/Telegram:)
    • <cycle_time>是(总)周期时间(以分钟为单位)(在您的示例中为 3 小时 = 180)
    • <application_run_time>是应用程序应运行的时间(以分钟为单位)(示例中为 15 分钟)
    • force是一个可选参数,强行终止应用程序。只需将其保留即可优雅地终止该应用程序。

使用参数运行应用程序

如果你运行带有参数的应用程序,请确保使用引号围绕运行应用程序的命令,例如:

python3 /path/to/cycle_run.py 'gedit /home/jacob/Desktop/test.sh' 30 5

正在运行的应用程序最小化或位于托盘中

定期启动和终止应用程序通常只需要最小化和/或放在托盘中。根据 OP 的要求,对此有几点说明:

  • 如果应用程序提供从命令行启动到托盘的功能,只需使用参数即可。在 的情况下Telgram,要使用的参数是:

    -startintray
    

    尽管该选项似乎并非在所有系统上都有效(在我的系统上有效),如上所述这里。您必须根据自己的情况进行测试。

  • 如果应用程序没有提供最小化或在托盘中启动的命令行选项,我建议结合使用(此)脚本这里的一个(我建议使用pid- 版本),这样可以最小化启动应用程序。

答案2

  1. 编辑你的 croncrontab -e 并将此行添加到你的 crontab 中,以每 3 小时运行一次计划作业

    00 */3 * * * * ~/killtelegram.sh >/dev/null 2>&1 
    

2.打开终端并输入以下命令

touch ~/killtelegram.sh
chmod +x ~/killtelegram.sh

使用你喜欢的编辑器打开 killtelegram.sh 并输入以下内容

#!/bin/bash
telegram &
sleep 15m
pkill telegram

保存并退出

就是这样。它会每 3 小时自动打开一次,并停留 15 分钟,然后就会被杀死。

相关内容