ฉันพยายามเรียกใช้สามสคริปต์ที่เกี่ยวข้องโดยอัตโนมัติ (ตัวเรียกใช้งาน
,ชุดแอป
,checkapp.py
) ใช้ตัวจับเวลา systemd และบริการ systemd
สคริปต์แรกตรวจสอบสคริปต์ python (แอป gui) ว่าเขาทำงานอยู่หรือไม่ หลังจากนั้นให้รีสตาร์ทแอป python gui ปัญหาของฉันคือเมื่อฉันพยายามเรียกใช้บริการ systemd มันปิดแอป gui
นี่คือสคริปต์แรก (ตัวเรียกใช้งาน
):
#!/bin/bash
/usr/share/checkapp/set-app
ทางออก 0
และนี่คืออันที่สอง (ชุดแอป
):
#!/bin/bash
CHECK_PRO="$(ps -ef | grep '[p]ython3 /usr/share/checkapp/checkapp.py' | awk '{print $2}')"
ถ้า [ "${CHECK_PRO}" != "" ]; แล้ว
ฆ่า -9 $CHECK_PRO
python3 /usr/share/checkapp/checkapp.py แสดง &
ไฟ
ทางออก 0
และนี่คืออันสุดท้าย (checkapp.py
):
#!/usr/bin/env python3
นำเข้าระบบปฏิบัติการ
นำเข้าสัญญาณ
นำเข้า GI
gi.require_version('Gtk', '3.0')
จาก gi.repository นำเข้า Gtk เป็น gtk
จาก gi.repository นำเข้า AppIndicator3 เป็น appindicator
gi.require_version('Gtk', '3.0')
APPINDICATOR_ID = 'ตรวจสอบแอป'
app_ico = '/usr/share/checkapp/logo.svg'
def หลัก ():
indicator = appindicator.Indicator.new(APPINDICATOR_ID, os.path.abspath(app_ico), appindicator.IndicatorCategory.SYSTEM_SERVICES)
indicator.set_status(appindicator.IndicatorStatus.ACTIVE)
indicator.set_menu(build_menu())
gtk.main()
def build_menu():
เมนู = gtk.Menu()
software_cen = gtk.MenuItem('ศูนย์ซอฟต์แวร์')
software_cen.connect('เปิดใช้งาน', software_center)
เมนูผนวก (software_cen)
เมนู.show_all()
เมนูย้อนกลับ
def software_center (แหล่งที่มา):
os.system('pkexec /usr/sbin/synaptic')
ถ้า __name__ == "__main__":
สัญญาณ.สัญญาณ(สัญญาณ.SIGINT, สัญญาณ.SIG_DFL)
หลัก()
และนี่คือ checkapp.service
ไฟล์ :
[หน่วย]
คำอธิบาย=checkapp
[บริการ]
ExecStart=/usr/share/checkapp/launcher
และนี่คือ ตรวจสอบแอปจับเวลา
ไฟล์:
[หน่วย]
คำอธิบาย=เรียกใช้แอปตรวจสอบทุกๆ 2 ชั่วโมง
RefuseManualStart=ไม่
RefuseManualStop=ไม่
[ตัวจับเวลา]
OnBootSec=20
OnUnitActiveSec=120นาที
ความแม่นยำ วินาที = 1 มิลลิวินาที
หน่วย = checkapp.service
[ติดตั้ง]
WantedBy=timers.target