ユースケースの例:
Telegram Desktop を3時間ごとに15分間定期的に開始して、新しく着信するメッセージをチェックしたいと思います。 15分後、アプリケーションは再び閉じられ、次の3時間後に再起動されます。
もちろん、最初に頭に浮かぶのは、cron
を使用することです。 cronを使用するか、小さなバックグラウンドスクリプトを使用するかは、主に好みの問題です。
Cronの利点は、既存のプロセスに接続することです(ただし、スクリプトは実際にはnothingをプロセッサの負荷に追加します)。
バックグラウンドスクリプトの利点は、柔軟性が高いことです。時間やその他の設定を変更したい場合は、単に強制終了して他の引数で実行します。また、別のセットアップを行わなくても、他のアプリケーションで再利用できます。コマンドだけで十分です。
以下のスクリプトは、コマンドで実行できます(例)
python3 <script> <command_to_run_application> <cycle_time> <application_run_time> force
最後の引数が設定されている場合、forcefullyはアプリケーションを強制終了します。設定しない場合、アプリケーションは正常に終了し、可能な変更などが失われないようにします。
#!/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
セクションなしで、.desktop
ファイルからコピー:/home/jacob/Downloads/Telegram/Telegram
)<cycle_time>
は(合計)サイクル時間(分)です(例では3時間= 180)<application_run_time>
は、アプリケーションを数分で実行する時間です(例では15)force
はオプションの引数で、forcefullyアプリケーションを強制終了します。アプリケーションを強制終了するgracefullyのままにしておきます。引数を指定してアプリケーションを実行する場合は、コマンドを引用符で囲んでアプリケーションを実行してください。例:
python3 /path/to/cycle_run.py 'gedit /home/jacob/Desktop/test.sh' 30 5
アプリケーションを定期的に起動および終了するのに必要なのは、最小化されたトレイまたはトレイだけです。 OPからの要求に応じて、それについていくつかのコメントがあります
crontab -e
でcronを編集し、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分間とどまり、殺されます。