Tại sao chỉ có một lệnh wget làm việc trong crontab của tôi?


15

Tôi muốn tìm nạp nội dung từ tập lệnh PHP trên máy chủ của mình hai lần một ngày, thay đổi biến truy vấn langđể đặt ngôn ngữ chúng tôi muốn và lưu nội dung này vào hai tệp ngôn ngữ cụ thể. Đây là crontab của tôi:

*/15 * * * * ~root/apache.sh > /var/log/checkapache.log
10 0 * * * wget -O /path/to/file-sv.sql "http://mydomain.com/path/?lang=sv"
11 0 * * * wget -O /path/to/file-en.sql "http://mydomain.com/path/?lang=en"

Vấn đề là chỉ có dòng lệnh wget đầu tiên được thực thi (hoặc chính xác là: tệp duy nhất đang được viết là /path/to/file-sv.sql). Nếu tôi chuyển hàng thứ hai và thứ ba, /path/to/file-en.sqlthay vào đó sẽ được viết. Dòng đầu tiên luôn chạy như mong đợi, bất kể nó ở đâu.

Sau đó tôi đã cố gắng sử dụng lynx -dump "http://mydomain.com/path/?lang=xx" > /path/to/file-xx.sqlvô ích; vẫn chỉ dòng lynx đầu tiên được thực hiện thành công. Ngay cả việc trộn wget và lynx cũng không thay đổi điều này!

Bắt đầu tuyệt vọng! Tui bỏ lỡ điều gì vậy? Có hàng ngàn bài viết về crontab (kết hợp với) wget hoặc lynx, nhưng tất cả dường như bao gồm các thiết lập và cú pháp cơ bản. Có ai có manh mối về những gì tôi đang làm sai?

Cảm ơn,
Alexander


Bạn có chắc chắn rằng bất cứ khi nào bạn truy cập mydomain.com/path/?lang=en một cái gì đó được trả lại? Bạn đã thử điều này từ một dòng lệnh để xem điều gì xảy ra (wget -O - mydomain.com/path/?lang=en )?
Torian

1
Tôi sẽ thử xóa và tạo lại sự trở lại của cỗ xe trong khoảng thời gian từ 2 đến 3.
Antonius Bloch

Thực hành tốt nhất là chỉ định đường dẫn đầy đủ đến các tệp thực thi trong crontab. Giống như: "/ usr / bin / wget". Tôi không nghĩ rằng điều này sẽ giúp ích trong trường hợp của bạn, vì một trong những con quỷ hoạt động.
Antonius Bloch

Điều gì được hiển thị trong nhật ký của cron khi điều này xảy ra?
đậu

@Torian: Hoạt động như một lá bùa.
Alexander Wallin

Câu trả lời:


42

Hãy thử thêm dòng mới vào cuối crontab của bạn.


1
Bạn là một ơn trời! Điều đó đã làm nó! Tôi sẽ bầu bạn nếu tôi có tiếng tăm. :)
Alexander Wallin

1
@gelraen Nhưng ... tại sao?
Samuel

2

Có điều gì đó về văn bản đó là sai. Chỉnh sửa crontab của bạn trong vim sau đó hiển thị các ký tự vô hình.

:set invlist

Bạn sẽ có thể nhìn thấy và sau đó sửa nó.


Sai thế nào? Làm cách nào để chỉnh sửa nó trong Vim? Tôi đã thử viết lại toàn bộ tập tin trong trường hợp dán sao chép sẽ gây ra vấn đề.
Alexander Wallin

@afEkenholm: làm thế nào để bạn chỉnh sửa nó bây giờ?
bahamat

1
@bahamat:# crontab -e
Alexander Wallin

@afEkenholm: làm điều này:EDITOR=vim crontab -e
bahamat

@bahamat: Mọi thứ có vẻ ổn. Có một màu tím $ở cuối mỗi dòng?
Alexander Wallin

1

Hãy thử thêm chuyển hướng, để gỡ lỗi crontab (hoặc đọc thư gốc):

11 0 * * * wget -O /path/to/file-en.sql "http://mydomain.com/path/?lang=en" > /tmp/crontab_ouptput 2> /tmp/crontab_error

Đồng thời chạy 'wget -O /path/to/file-en.sql " http://mydomain.com/path/?lang=en "' từ bảng điều khiển.

Đồng thời sử dụng 'crontab -e' để xác thực crontab mới.

Ngoài ra, hãy thử xóa dòng không hoạt động và nhập lại từ bàn phím.

Sao lưu corntab và chạy lệnh:

crontab -l | crontab -

Thêm /tmp/crontab_ouptput 2> /tmp/crontab_errorchỉ hoạt động cho dòng đầu tiên. Chạy lệnh từ bàn điều khiển hoạt động tốt. Viết lại toàn bộ tập tin bằng tay không, nhưng không có gì thay đổi.
Alexander Wallin

Sao lưu crontab và thử: crontab -l | crontab -
alvosu

Cảm ơn những nỗ lực, @alvosu, nhưng một dòng mới đơn giản đã làm được điều đó!
Alexander Wallin

1

Tôi chỉ dành một chút thời gian để thử các câu trả lời ở trên (thêm dòng mới, xóa dòng mới, v.v.) trên một hệ thống chạy cronie . Cuối cùng tìm thấy ở đó là một lỗi trong cronie 1.5.3chỉ thực hiện các công việc định kỳ đầu tiên cho mỗi người dùng . Nó được sửa trong 1.5.4

https://github.com/cronie-crond/cronie/issues/30

Hy vọng điều này sẽ giúp ai đó tiết kiệm thời gian ...

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.