Làm cách nào để sử dụng curl trong công việc định kỳ?


12

Tôi cần thiết lập một công việc định kỳ trong cpanel gọi một URL (trên cùng một máy chủ) mỗi tuần một lần. Tôi sẽ sử dụng wget nhưng hóa ra điều này bị vô hiệu hóa trên máy chủ chia sẻ đang được sử dụng.

Có một sự thay thế cho wget ? Tôi đã nghe nói rằng curl có thể được sử dụng nhưng tôi không biết làm thế nào để thiết lập nó trong một lệnh cron.

Ngoài ra, lệnh để làm cho cronjob không làm gì khi hoàn thành?

Bất kỳ ý tưởng đánh giá rất cao!


1
Wget sẽ làm gì nếu bạn có thể sử dụng nó?
dùng9517

Tại sao họ sẽ cho phép curl trong trường hợp họ đã vô hiệu hóa wget?
andol

@Iain - cần xử lý tập lệnh PHP
davidhyland

@Andol - câu hỏi rất hay. đúng là như vậy
davidhyland

Câu trả lời:


19

thay vì sử dụng wget, curl hoạt động như thế này:

curl --silent http://domain.com/cron.php

mà sẽ làm việc theo cách tương tự như wget. Nếu đó là tệp php bạn đang khởi chạy, có bất kỳ lý do nào bạn không thể chạy nó thông qua trình thông dịch php dòng lệnh như vậy:

php -q /path/to/cron.php

tương tự trên một yêu cầu máy chủ web và thường sẽ hoạt động nhanh hơn nhiều và không có giới hạn thời gian chờ nhất định khi được gọi qua máy chủ web / curl


Gọi curl theo cách đó sẽ in kết quả ra thiết bị xuất chuẩn. Nếu bạn muốn hành xử tương đương với wget và lưu kết quả đầu ra vào tên tệp dựa trên url, bạn cũng muốn thêm cờ --remote-name.
andol

- có nghĩa là không có phản hồi hoặc đầu ra?
davidhyland

1
Ngoài ra, gọi tập lệnh php từ dòng lệnh có thể không nhất thiết mang lại kết quả tương tự. Ngoài khả năng cấu hình khác nhau, cũng có kịch bản không phổ biến của tập lệnh được chạy như một người dùng khác theo cách đó. Tất cả phụ thuộc vào thiết lập.
andol

Chà, tôi đã làm cho nó hoạt động bằng cách sử dụng "curl --silent domain.com/script.php > / dev / null 2> & 1" nhưng nó cũng hoạt động tốt với "curl -o --url domain.com/script.php > / dev / null 2> & 1 "sự khác biệt là gì?
davidhyland

1
Lệnh đầu tiên gửi tất cả đầu ra tới / dev / null, lệnh thứ hai sẽ tạo một tệp được gọi -urltrong thư mục chính của người dùng đang chạy tập lệnh chứa tệp đầu ra của tệp php của bạn, tất cả các đầu ra khác sẽ chuyển đến / dev / null.
dùng9517

6

Nếu curl có sẵn, bạn có thể thử một cái gì đó như

1 1 * * 0  /usr/bin/curl --silent http://example.come/some.php &>/dev/null

Điều đó sẽ khiến curl hoàn toàn im lặng để bạn không nhận được bất kỳ email nào từ nó khi hoàn thành.


4
Tôi cũng khuyên bạn nên sử dụng tùy chọn --show-error, vì vậy nó im lặng cho hoạt động bình thường nhưng sẽ gây ra lỗi nếu nó xảy ra.
emerino

5

Tôi khuyên bạn nên thêm tham số "-m" ngoài --silent vì tham số này đặt thời gian tối đa được phép cho chuyển. Hãy tưởng tượng bạn gọi cron mỗi phút và tập lệnh mất 2 phút - điều này có thể có tác động xấu đến tải máy chủ hoặc những thứ khác.

1 1 * * 0  /usr/bin/curl -m 120 -s http://example.come/some.php &>/dev/null
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.