Làm cách nào tôi có thể ngăn tác vụ theo lịch trình chạy nếu cùng một tác vụ đang chạy?


11

Tôi đã viết một tập lệnh php để kiểm tra xem có tập tin mới nào trong một thư mục không và nếu có tập tin mới nào tồn tại, hãy tải chúng lên máy chủ. Những tập tin này có thể khá lớn. Tôi muốn chạy tập lệnh này thường xuyên - giả sử cứ sau 5 phút - như một tác vụ theo lịch trình để các tệp được chuyển đến máy chủ càng sớm càng tốt. Tuy nhiên, một khi tập lệnh đã cố tải lên một tập tin, tôi không muốn nó được chạy lại, vì tôi sợ trường hợp thứ hai sẽ ghi đè lên tập tin đã được tải lên máy chủ.

Làm cách nào để chạy tập lệnh dưới dạng tác vụ theo lịch trình trừ khi tập lệnh đang chạy?

Câu trả lời:


21

Giả sử bạn chỉ đặt tác vụ thành "Lặp lại" trong hệ thống "Nhiệm vụ theo lịch trình" của XP, không cần thực hiện thêm hành động nào đối với phần của bạn. Nhiệm vụ theo lịch trình sẽ không "Lặp lại" một nhiệm vụ nếu nó đang chạy.

Nếu bạn muốn ghi đè mặc định đó, bạn có thể chọn hộp "Nếu tác vụ vẫn đang chạy, hãy dừng nó vào lúc này" để trình lập lịch tác vụ tiêu diệt phiên bản cuối cùng trước khi bắt đầu một trường hợp mới (mặc dù nghe có vẻ như bạn có thể không 't muốn điều đó).


2

Cách tôi đã làm là chạy tác vụ từ một tệp bó bắt đầu mỗi ngày một lần ngay sau nửa đêm và chạy cho đến nửa đêm tiếp theo. Ưu điểm của điều này là bởi vì đó là một tập lệnh duy nhất mà bạn không thể chạy phiên bản thứ hai. Tôi cho rằng một nhược điểm có thể là bạn có thể dự đoán chính xác tần suất chạy tập lệnh bởi vì nó sẽ đợi một khoảng thời gian sau mỗi lần chạy. Dù sao đi nữa nếu bạn quan tâm kịch bản của tôi trông như sau:

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

JR


1

Trong trình lập lịch tác vụ của windows có một hộp kiểm (hoặc tùy chọn) để làm gì nếu tác vụ đã chạy khi tác vụ bắt đầu lại. Bạn có thể đặt nó không bắt đầu hoặc chạy song song


1
Cài đặt đó trong bộ lập lịch tác vụ XP ở đâu? Tôi không tìm thấy bất kỳ cách nào để bộ lập lịch XP thực hiện cùng một nhiệm vụ nhiều lần.
Evan Anderson

Vista. Tôi nhận thấy thẻ windows-xp sau khi tôi nhập câu trả lời.
Kevin Kuphal

0

Cách thông thường là kiểm tra một số thứ toàn cầu (thường là một tệp trống cụ thể) khi tác vụ bắt đầu. Nếu nó tồn tại, tác vụ đã chạy. Nếu không, hãy thiết lập toàn cầu, làm công việc của bạn, bỏ đặt toàn cầu điều đó khi nhiệm vụ được thực hiện.

Điều này có vấn đề nếu nhiệm vụ thất bại mà không làm phiền toàn cầu. Bạn có thể luôn muốn bỏ đặt nó trong thói quen khởi động máy tính vì tác vụ không thể chạy nếu bạn đã khởi động lại. Tốt hơn là tìm một thứ toàn cầu tự động biến mất khi nhiệm vụ kết thúc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.