ユースケースの例:
Telegram Desktopを 3時間ごとに15分間定期的に起動して、新しく着信するメッセージをチェックしたいと思います。15分後、アプリケーションは再び閉じられ、次の3時間後に再起動されます。
cron
すると、プログラムを明確に開始できます。cron aを使用することもできますがkill -15
、それをシャットダウンするための穏やかなナッジとして処理するか、無視するか、単にクラッシュするかはアプリケーションに依存します。
ユースケースの例:
Telegram Desktopを 3時間ごとに15分間定期的に起動して、新しく着信するメッセージをチェックしたいと思います。15分後、アプリケーションは再び閉じられ、次の3時間後に再起動されます。
cron
すると、プログラムを明確に開始できます。cron aを使用することもできますがkill -15
、それをシャットダウンするための穏やかなナッジとして処理するか、無視するか、単にクラッシュするかはアプリケーションに依存します。
回答:
もちろん、頭に浮かぶ一番最初のことは使うこと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
-バージョンをお勧めします)。これにより、起動が可能になります。アプリケーションが最小化されました。
を使用して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分間とどまり、殺されます。