Cron so với kịch bản nền
Tất nhiên, điều đầu tiên xuất hiện trong tâm trí là sử dụng cron
. Cho dù bạn sử dụng cron, hoặc một kịch bản nền nhỏ chủ yếu là vấn đề của hương vị.
Ưu điểm của cron là nó kết nối với một tiến trình hiện có (mặc dù tập lệnh thêm vào, thực ra không có gì cho tải bộ xử lý).
Ưu điểm của kịch bản nền là linh hoạt hơn; chỉ cần giết nó và chạy nó với các đối số khác nếu bạn muốn thay đổi thời gian hoặc các cài đặt khác. Bạn cũng có thể sử dụng lại nó với các ứng dụng khác mà không cần phải thực hiện thiết lập khác, chỉ cần một lệnh là đủ.
Kịch bản dưới đây có thể được chạy bằng lệnh (ví dụ)
python3 <script> <command_to_run_application> <cycle_time> <application_run_time> force
Trong trường hợp các đối số cuối cùng, nếu được thiết lập, mạnh mẽ giết ứng dụng. Nếu không được đặt, ứng dụng sẽ đóng một cách duyên dáng, để đảm bảo các thay đổi có thể, v.v. sẽ không bị mất.
Kịch bản
#!/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)
Để sử dụng
Chạy các ứng dụng có đối số
Nếu bạn chạy một ứng dụng có đối số, hãy đảm bảo bạn sử dụng dấu ngoặc kép quanh lệnh để chạy ứng dụng , ví dụ:
python3 /path/to/cycle_run.py 'gedit /home/jacob/Desktop/test.sh' 30 5
Chạy các ứng dụng được thu nhỏ hoặc trong khay
Bắt đầu và chấm dứt các ứng dụng định kỳ thường sẽ chỉ cần được thu nhỏ và / hoặc trong khay. Theo yêu cầu của OP, một vài nhận xét về điều đó:
Nếu một ứng dụng cung cấp khởi động trong khay từ dòng lệnh, chỉ cần sử dụng đối số để làm như vậy. Trong trường hợp Telgram
, đối số sẽ sử dụng là:
-startintray
mặc dù tùy chọn dường như không hoạt động trên tất cả các hệ thống (nó thực hiện trên máy của tôi), như đã đề cập ở đây . Bạn sẽ phải kiểm tra trong tình huống của bạn.
Nếu ứng dụng không cung cấp tùy chọn dòng lệnh để khởi động được thu nhỏ hoặc trong khay, tôi khuyên bạn nên sử dụng tập lệnh (này) kết hợp với tập lệnh ở đây (tôi đề xuất pid
phiên bản -), để có thể khởi động các ứng dụng giảm thiểu.