ฉันจะป้องกันไม่ให้ภารกิจตามกำหนดเวลาทำงานได้ถ้างานเดิมกำลังทำงานอยู่แล้ว?


11

ฉันได้เขียนสคริปต์ php เพื่อตรวจสอบว่ามีไฟล์ใหม่ในโฟลเดอร์หรือไม่และหากมีไฟล์ใหม่ให้อัปโหลดไปยังเซิร์ฟเวอร์ ไฟล์เหล่านี้มีขนาดค่อนข้างใหญ่ ฉันต้องการเรียกใช้สคริปต์นี้บ่อยครั้ง - สมมติว่าทุก ๆ 5 นาทีตามภารกิจที่กำหนดไว้เพื่อให้ไฟล์ถูกย้ายไปยังเซิร์ฟเวอร์โดยเร็วที่สุด อย่างไรก็ตามเมื่อสคริปต์พยายามอัปโหลดไฟล์แล้วฉันไม่ต้องการให้เรียกใช้อีกครั้งเนื่องจากฉันกลัวว่าอินสแตนซ์ที่สองจะเขียนทับไฟล์ที่อัปโหลดไปยังเซิร์ฟเวอร์แล้ว

ฉันจะรันสคริปต์ตามภารกิจที่กำหนดเวลาไว้ได้อย่างไรเว้นแต่สคริปต์นั้นจะทำงานอยู่แล้ว?

คำตอบ:


21

สมมติว่าคุณเพิ่งตั้งค่างานเป็น "ทำซ้ำ" ในระบบ XP "งานที่กำหนดเวลา" ไม่จำเป็นต้องดำเนินการใด ๆ เพิ่มเติมในส่วนของคุณ งานที่กำหนดเวลาไว้จะไม่ "ทำซ้ำ" งานหากงานนั้นทำงานอยู่

หากคุณต้องการแทนที่ค่าเริ่มต้นนั้นคุณสามารถทำเครื่องหมายที่ช่อง "หากงานยังคงทำงานอยู่ให้หยุดการทำงานในเวลานี้" เพื่อให้ตัวกำหนดเวลางานฆ่าอินสแตนซ์สุดท้ายก่อนที่จะเริ่มงานใหม่ ไม่ต้องการมัน)


2

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

rem *** Get the day number. When the day number changes that signals
rem *** the script to exit.

for /f "tokens=1" %%i in ('date /t') do set THEDATE=%%i
set THEDAY=%THEDATE:~0,2%

rem *** Open the log file

echo Starting Whatever >%LOGFILE%
date /t >>%LOGFILE%
echo . >>%LOGFILE%

rem *** Start the monitoring loop

:start

rem *** Run your script

rem Run the script here

rem *** Pause for 300 seconds

sleep 300

rem *** Check the day number. If it is still the same loop back to the
rem *** start of the monitoring loop.

for /f "tokens=1" %%i in ('date /t') do set THEDATE=%%i
if %THEDATE:~0,2% == %THEDAY% goto start

จูเนียร์


1

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


1
การตั้งค่านั้นอยู่ที่ไหนในตัวกำหนดตารางงาน XP ฉันไม่พบวิธีใด ๆ ที่จะทำให้ตัวจัดกำหนดการ XP ทำงานในลักษณะเดียวกันหลาย ๆ ครั้งพร้อมกัน
Evan Anderson

ทิวทัศน์ ฉันสังเกตเห็นแท็ก windows-xp หลังจากฉันป้อนคำตอบ
เควิน Kuphal

0

วิธีปกติคือการทดสอบบางสิ่งทั่วโลก (มักจะเป็นไฟล์ที่ว่างเปล่าที่เฉพาะเจาะจง) เมื่องานเริ่ม หากมีอยู่แสดงว่างานกำลังดำเนินการอยู่ ถ้าไม่ตั้งค่า global global ให้ทำสิ่งของของคุณและยกเลิกการตั้งค่า global thingy เมื่องานเสร็จ

นี้มีปัญหาหากงานล้มเหลวโดยไม่ต้องล้างสิ่งที่ทั่วโลก คุณอาจต้องการยกเลิกการกำหนดในรูทีนการเริ่มต้นคอมพิวเตอร์เสมอเนื่องจากงานไม่สามารถทำงานได้หากคุณรีสตาร์ท ดีกว่าคือการหาสิ่งของระดับโลกที่หายไปโดยอัตโนมัติเมื่องานสิ้นสุดลง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.