주기적으로 응용 프로그램을 시작하고 닫는 소프트웨어가 있습니까?


11

예시적인 사용 사례 :

새로 들어오는 메시지를 확인하기 위해 15 분 동안 3 시간마다 Telegram Desktop을 주기적으로 시작하고 싶습니다 . 15 분 후 응용 프로그램을 다시 닫고 다음 3 시간 후에 다시 시작해야합니다.


이것은 스크립트하기가 매우 쉽습니다. 확인을 위해 응용 프로그램을 시작 하시겠습니까? 그렇다면, 그것을 실행하는 명령은 무엇입니까?
Jacob Vlijm

함께 cron하면 분명히 프로그램을 시작할 수 있습니다. 당신은 또한 cron 할 수 kill -15있지만 그것은 종료하기 위해 부드러운 너지로 처리하는지, 무시하거나 그냥 충돌하는지에 따라 응용 프로그램에 따라 다릅니다.
Harald

답변:


9

크론과 백그라운드 스크립트

물론 가장 먼저 떠오르는 것은 사용하는 것입니다 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필자의 경우-섹션 없이 .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버전 은 -버전을 제안 함 ). 응용 프로그램이 최소화되었습니다.


친애하는 @JacobVlijm, 놀라운 스킬 셋이 있습니다! 이 크리스마스 선물에 대단히 감사합니다. 스크립트가 훌륭하게 작동합니다. "Take a Break"와 마찬가지로,이 스크립트가 사용자가 응용 프로그램,주기 시간 및 응용 프로그램 런타임을 정의 할 수있는 멋진 GUI로 바뀌는 것을 상상할 수 있습니다. 이 GUI는 시작시 Telegram 또는 Skype와 같은 응용 프로그램을 준비하기 위해 실행될 수 있습니다. 어떻게 생각해?
orschiro

1
@orschiro는 완벽하게 들린다! GUI는 거의 변경되지 않고 사용할 준비가되었습니다. :). 좋은 크리스마스 되세요!
Jacob Vlijm

응용 프로그램을 최소화하거나 백그라운드에서 강제로 열 수 있습니까?
orschiro

@orschiro 오프 코스, 당신은 무엇을 염두에두고 있습니까?
Jacob Vlijm

1
안녕하세요 @orschiro 님이 답변에 섹션을 추가했습니다.
Jacob Vlijm

5
  1. 로 cron을 편집 crontab -e 하고이 라인을 crontab에 추가하여 3 시간마다 스케줄 작업으로 실행하십시오.

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

터미널을 열고 아래 명령을 입력하십시오

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

선호하는 편집기로 killtelegram.sh를 열고 아래와 같이 작성하십시오

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

저장하고 종료

그게 다야. 매 3 시간마다 자동으로 열리 며 15 분 동안 유지되며 사망합니다.


안녕하세요 라자, askubuntu.com/tags/schedule/synonyms ? 에 대한 투표를 고려 하시겠습니까 ?
Jacob Vlijm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.