크론과 백그라운드 스크립트
물론 가장 먼저 떠오르는 것은 사용하는 것입니다 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)
사용
인수를 사용하여 응용 프로그램 실행
인수와 함께 응용 프로그램을 실행하는 경우 명령 주위에 따옴표를 사용 하여 응용 프로그램을 실행해야합니다 . 예 :
python3 /path/to/cycle_run.py 'gedit /home/jacob/Desktop/test.sh' 30 5
응용 프로그램을 최소화하거나 트레이에서 실행
주기적으로 응용 프로그램을 시작하고 종료하는 작업은 최소화 및 / 또는 트레이에서만 필요합니다. OP의 요청에 따라 다음과 같은 몇 가지 사항이 있습니다.
경우 응용 프로그램 이벤트 명령 줄에서 트레이에 시작, 단순히 그렇게 인수를 사용합니다. 의 경우 Telgram사용할 인수는 다음과 같습니다.
-startintray
여기에 언급 된 것처럼 옵션이 모든 시스템에서 작동하지는 않는 것 같습니다 . 상황에 따라 테스트해야합니다.
응용 프로그램이 시작을 최소화하거나 트레이에 명령 줄 옵션을 제공하지 않으면 여기에있는 스크립트와 함께이 스크립트를 사용하는 것이 좋습니다 (이 pid버전 은 -버전을 제안 함 ). 응용 프로그램이 최소화되었습니다.