Làm crontab hoạt động lúc 0 giờ


0

Tôi cố gắng thực hiện một số lệnh như thế này:

*/10 0,1 * * * $BPY some_script.py

Có nghĩa là tôi muốn chạy nó cứ sau 10 phút từ 0:00 đến 1:00.

NHƯNG: Tôi thấy trong / var / log / cron của tôi rằng nó không được thực thi. Và hơn thế nữa: đó là nhiệm vụ duy nhất không được thực thi (vì vậy cron của tôi hoạt động tốt trong các trường hợp khác). Hệ điều hành hoạt động là Debian GNU / Linux 6.0.

Tôi đang làm gì sai? Không phải là một giờ xấu?

cập nhật: $ BPY chỉ giữ đường dẫn đến python thực thi. Các lệnh khác cũng sử dụng nó và nó chạy tốt.

Chà, nếu đó là một lệnh thực sự tồi - ít nhất nó sẽ xuất hiện trong / var / log / cron

Cập nhật 2: Kịch bản hoạt động tốt với các chương trình khác hours(ví dụ: * * * * * chạy hoàn hảo mỗi phút và nó thực hiện chính xác những gì tôi muốn)


1
không, đó không phải là giờ tồi tệ some_script.py của bạn có thể thực thi được không? $ BPY được biết đến với cron?
Serge

$ BPY chỉ là một biến chứa đường dẫn python của virtualenv - tôi nên đề cập đến nó. Nó được sử dụng thành công trong các lệnh khác của crontab này.
Nikita Hismatov

Việc triển khai hiện tại của bạn sẽ không có nó chạy cứ sau mười phút từ 12 đến 1, thay vào đó, nó sẽ chạy cứ sau mười phút cho cả 12 giờ và 1 giờ đồng nghĩa với việc nó sẽ thực hiện trong 2 giờ (hoặc sau đó)
UtahJarhead

2
Ngay cả sau lần chỉnh sửa thứ hai của bạn, cú pháp nằm trong phạm vi của những gì cron chấp nhận. Tuy nhiên, theo mô tả ban đầu của bạn về việc nó muốn chạy từ 12 đến 1, hãy xóa phần này ,1để nó chỉ đọc ' 0' vì hiện tại 0,1nó sẽ chạy từ 12 đến trước 2 giờ sáng.
UtahJarhead

Câu trả lời:


1

Có vẻ như cron không $BPYđược xác định. Có some_script.pycần phải được thực hiện? Mục đích của nó là $BPYgì? Ngoài ra, bạn có thể cần đường dẫn đầy đủ của tập lệnh, không chỉ tên của tập lệnh.

Giả sử đó some_script.pylà tập lệnh thực thi dự định thực sự, sau đó thử chỉ thực hiện tập lệnh đó (với đường dẫn đầy đủ !!)

Trong các bình luận của bạn bên dưới câu trả lời này, bạn đã nói rằng đó $BPYlà đường dẫn của Python. Thay vì làm điều đó, bạn nên sử dụng một shebangđể chỉ định đường dẫn đầy đủ của trình thông dịch sẽ được sử dụng. Một con trăn chỉ định shebang phổ biến là : #!/usr/bin/python. Đây phải là dòng đầu tiên của some_script.pytập tin của bạn .

Theo như cú pháp ...

Định dạng cron là một cách đơn giản, nhưng mạnh mẽ và linh hoạt để xác định thời gian và tần suất của các hành động khác nhau.

định dạng cron bao gồm các trường được phân tách bằng khoảng trắng:

[Min] [Hr] [Ngày trong tháng] [Tháng trong năm] [Ngày trong tuần]

Sơ đồ sau đây cho thấy những gì nó bao gồm:

* * * * *
| | | | |
| | | | + ---- Ngày trong tuần (phạm vi: 0-6, 0 đứng vào Chủ nhật; Thứ Hai, Thứ ba, v.v.
| | | | Hầu hết các hệ điều hành công nhận Chủ nhật là 0 hoặc 7)
| | | + ------ Tháng trong năm (phạm vi: 1-12 hoặc tháng 1, tháng 2, v.v.)
| | + -------- Ngày trong tháng (phạm vi: 1-31)
| + ---------- Giờ (phạm vi: 0-23)
+ ------------ Phút (phạm vi: 0-59)

Bất kỳ trường nào trong số 6 trường này có thể là dấu hoa thị ( *). Điều này có nghĩa là toàn bộ phạm vi của các giá trị có thể, tức là mỗi phút, mỗi giờ, v.v. Trong bốn trường đầu tiên.

Bất kỳ trường nào cũng có thể chứa danh sách các giá trị được phân tách bằng dấu phẩy, (ví dụ 1,3,7) hoặc một phạm vi giá trị (hai số nguyên được phân tách bằng dấu gạch nối, ví dụ 1-5).

Sau dấu hoa thị ( *) hoặc một phạm vi giá trị, bạn có thể sử dụng ký tự /để chỉ định rằng các giá trị được lặp đi lặp lại với một khoảng nhất định giữa chúng. Ví dụ: bạn có thể viết 0-23/2trong trường Giờ để chỉ định rằng một số hành động nên được thực hiện mỗi hai giờ (nó sẽ có tác dụng tương tự như 0,2,4,6,8,10,12,14,16,18,20,22). Giá trị */4trong trường Phút có nghĩa là hành động nên được thực hiện cứ sau 4 phút. 1-30/3có nghĩa giống như 1,4,7,10,13,16,19,22,25,28.

Trong Tháng và Ngày của lĩnh vực tuần, bạn có thể sử dụng tên của tháng hoặc các ngày trong tuần viết tắt là ba chữ cái đầu tiên ( Jan, Feb, ..., Dechay Mon, Tue, ..., Sun) thay vì giá trị số của họ.

Ngoài ra, bạn có thể sử dụng các từ khóa đặc biệt thay cho 5 trường đầu tiên được chỉ định ở trên:

chuỗi ý nghĩa
------ -------
@reboot Chạy một lần, lúc khởi động.
@yearly Chạy mỗi năm một lần, "0 0 1 1 *".
@annual (giống như @yearly)
@monthly Chạy mỗi tháng một lần, "0 0 1 * *".
@weekly Chạy mỗi tuần một lần, "0 0 * * 0".
@d Daily Chạy mỗi ngày một lần, "0 0 * * *".
@midnight (giống như @d Daily)
@hourly Chạy mỗi giờ một lần, "0 * * * *".

Định dạng thay thế này không được hỗ trợ trong các hệ điều hành cũ, độc quyền như SCO Unix.


$ BPY chỉ là một biến chứa đường dẫn python của virtualenv - tôi nên đề cập đến nó. Nó được sử dụng thành công trong các lệnh khác của crontab này.
Nikita Hismatov

Trong trường hợp đó, chỉ cần thay đổi dòng đầu tiên của đường dẫn đến vị trí của python: #!/usr/bin/python(hoặc bất kể đó là gì)
UtahJarhead

Cập nhật câu trả lời để phản ánh mục đích của $BPY.
UtahJarhead

Sử dụng shebang sẽ không thuận tiện, vì tôi sử dụng virtualenv trên các máy khác nhau - vì vậy nhà phát triển sẽ phải đồng bộ hóa đường dẫn của mình đến máy chủ :(
Nikita Hismatov

Có lẽ là một vấn đề gỡ lỗi, bạn có thể yêu cầu nó nhổ giá trị của nó $BPYvào một tệp văn bản. " echo $BPY > /tmp/bpy.txt"
UtahJarhead
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.