アプリケーションを定期的に起動および終了するソフトウェアはありますか?


11

ユースケースの例:

Telegram Desktopを 3時間ごとに15分間定期的に起動して、新しく着信するメッセージをチェックしたいと思います。15分後、アプリケーションは再び閉じられ、次の3時間後に再起動されます。


これは非常に簡単にスクリプト化できます。それをチェックするために、アプリケーションを起動することはできますか?もしそうなら、それを実行するコマンドは何ですか?
ジェイコブVlijm

を使用cronすると、プログラムを明確に開始できます。cron aを使用することもできますがkill -15、それをシャットダウンするための穏やかなナッジとして処理するか、無視するか、単にクラッシュするかはアプリケーションに依存します。
ハラルド

回答:


9

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>アプリケーションを実行するためのコマンドです(なし--%u-section、私の場合には、からコピーされ.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
    

    ここで述べように、このオプションはすべてのシステムで機能するとは限りません(私のシステムでは機能します)。状況に応じてテストする必要があります。

  • アプリケーションが最小化またはトレイで起動するコマンドラインオプションを提供しない場合、(this)スクリプトをここにあるものと組み合わせて使用​​することをお勧めしますpid-バージョンをお勧めします)。これにより、起動が可能になります。アプリケーションが最小化されました。


@JacobVlijm様、すばらしいスキルセットがあります!このクリスマスプレゼントをありがとうございました。あなたのスクリプトは素晴らしい作品です。「Take a Break」と同じように、このスクリプトが、ユーザーがアプリケーション、サイクル時間、およびアプリケーション実行時間を定義できる素敵な、単純なGUIに変わることを想像できます。その後、このGUIを起動時に実行して、TelegramやSkypeなどのアプリケーションを準備できます。どう思いますか?
orschiro

1
@orschiroは完璧ですね!guiを使用する準備がほぼ整いましたが、いくつか変更があります:)。素敵なクリスマスを!
ジェイコブVlijm

アプリケーションを最小化またはバックグラウンドで強制的に開くことは可能ですか?
orschiro

@orschiro off course、あなたは何を考えていますか?
ジェイコブVlijm

1
こんにちは@orschiroが回答にセクションを追加しました。
ジェイコブVlijm

5
  1. を使用してcronを編集し、crontab -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分間とどまり、殺されます。


こんにちはRaja、これに関する投票を検討してください:askubuntu.com/tags/schedule/synonyms
ジェイコブVlijm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.