Score:1

งาน Crontab ทำงานเพียงครั้งเดียว

ธง fi

ผมสร้าง 60 crontab งานที่จะเรียกใช้ หลาม สคริปต์ทุก ที่สอง และสคริปต์ไพ ธ อนเป็นเพียงการทดสอบและมีเพียงสิ่งต่อไปนี้:

แจ้งนำเข้า2
จาก datetime นำเข้า datetime

alert2.init('')

n = alert2.Notification('test', datetime.now().strftime('%I:%M:%S'))
n.set_timeout(1,000)
n.show()

และงาน crontab คือ:

* * * * * DISPLAY=':0' XAUTHORITY='/run/user/1000/gdm/Xauthority' python3 /path/to/my/script.py
* * * * * ( นอน 1 && DISPLAY=':0' XAUTHORITY='/run/user/1000/gdm/Xauthority' python3 /path/to/my/script.py )
* * * * * ( นอน 2 && DISPLAY=':0' XAUTHORITY='/run/user/1000/gdm/Xauthority' python3 /path/to/my/script.py )
.
.
.
.
.

ครั้งแรกจะรอ 1 นาทีและเริ่มรัน แต่จะไม่ดำเนินการทั้งหมดและจะไม่ดำเนินการอีก

ฉันเพิ่มงาน crontab เพื่อทดสอบว่าจะใช้งานได้หรือไม่ (* * * * * env > /home/hadi/Desktop/env.output) และทำงานได้ดี นี่คือเนื้อหาไฟล์เอาต์พุต:

POWERSHELL_TELEMETRY_OPTOUT=1
DOTNET_CLI_TELEMETRY_OPTOUT=1
HOME=/บ้าน/ฮาดี
COMMAND_NOT_FOUND_INSTALL_PROMPT=1
LOGNAME=ฮาดี
PATH=/usr/bin:/bin
LANG=en_US.UTF-8
SHELL=/ถัง/sh
JAVA_HOME=/usr/lib/jvm/jdk-15.0.2
PWD=/บ้าน/ฮาดี

ดังนั้นฉันเดาว่าปัญหาอยู่ที่การแจ้งเตือน จะแก้ไขได้อย่างไร

และอีกอย่างหนึ่ง DISPLAY=':0' บางครั้งฉันควรตั้งค่าเป็น 1 ไม่ 0 ฉันไม่รู้ว่าทำไม

za flag
คุณไม่ควรเรียกใช้ 60 cronjobs หากคุณไม่สามารถทำได้ใน Python ให้เริ่มสคริปต์ซึ่งจะเริ่มต้น 60 งาน (เช่น การวนซ้ำ)ดีกว่า: อย่าเริ่มต้นด้วย cron แต่ให้ xinitrc ทำงานต่อไปและหยุดชั่วคราวเป็นเวลา 1 วินาที และเริ่มงานใหม่เมื่อล้มเหลว
HaDi AyOuB avatar
fi flag
นั่นหมายความว่าอย่างไร? @userunknown
HaDi AyOuB avatar
fi flag
ฉันต้องการให้สคริปต์เดียวกันทำงานในแต่ละวินาที ถ้าฉันใช้การวนซ้ำ การดำเนินการจะบล็อกการวนซ้ำจนกว่าการดำเนินการของงานปัจจุบันจะเสร็จสิ้น
za flag
ไม่ คุณสามารถเริ่มคำสั่งหลักในเบื้องหลังได้
HaDi AyOuB avatar
fi flag
ตกลงจะทำอย่างไร? คุณช่วยอธิบายเพิ่มเติมได้ไหม
Score:1
ธง za

ด้วย postfix & คุณสามารถเริ่มสคริปต์ไพ ธ อนของคุณในพื้นหลัง แม้ว่าอินสแตนซ์จะถูกบล็อกและแฮงค์ตลอดไปหรือเสร็จสิ้นในเสี้ยววินาที งานถัดไปก็จะเริ่มในวินาทีต่อมา

#!/bin/bash

ในขณะที่จริง 
ทำ
  นอน1
  python3 /path/to/my/script.py &
เสร็จแล้ว 

Cron ไม่เหมาะสำหรับเม็ดเวลาที่ละเอียดกว่านาที ตัวจับเวลา Systemd ใช้งานได้สำหรับการย่อยที่ละเอียดขึ้น แต่ถ้าคุณไม่ต้องการจำกัดเวลาเลย ควรเริ่มงานเมื่อเหมาะสมในขั้นตอนการเริ่มต้น

เนื่องจากโค้ดของคุณใช้ DISPLAY=:0 จึงอาจเริ่มต้นเป็นหน่วย systemd ทั้งนี้ขึ้นอยู่กับ graphical.target เพื่อหลีกเลี่ยงการเรียกใช้ก่อนที่ระบบกราฟิกจะทำงาน

สคริปต์การวนซ้ำอาจสะสมความคลาดเคลื่อนของเวลาจำนวนมากขึ้นเมื่อเวลาผ่านไป และ 3597 ครั้งต่อชั่วโมงแทนที่จะเป็น 3600 แต่บางที "ประมาณหนึ่งครั้งต่อวินาที" ก็เพียงพอแล้ว ถ้าไม่คุณต้องวัดเวลาด้วยตัวคุณเองและแก้ไขตัวเอง

คำแนะนำที่ดีเกี่ยวกับ systemd มีอยู่ใน YT เป็นต้น

HaDi AyOuB avatar
fi flag
ถ้าฉันรันสคริปต์ python3 วนซ้ำและสคริปต์นี้ใช้โมดูล `request` ลูปจะถูกบล็อกจนกว่าสคริปต์จะเสร็จสิ้น ฉันต้องการเรียกใช้สคริปต์เดียวกันทุกวินาที เป็นไปได้ไหม
za flag
ฉันไม่รู้จัก Python ดังนั้นฉันจึงไม่รู้จักโมดูลคำขอและไม่รู้วิธีทดสอบ IMHO ถ้า python เริ่มต้นเป็นเธรด มันไม่ควรบล็อกบางสิ่งได้ ไม่ว่าอะไรจะเกิดขึ้นก็ตาม และลูปควรดำเนินต่อไป คุณสามารถจัดเตรียมสคริปต์ไพ ธ อนที่เรียบง่ายเพื่อเรียกในลูปเพื่อพิสูจน์ประเด็นของคุณได้หรือไม่?

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา