Bagaimana cara menggunakan curl dalam pekerjaan cron?

12

Saya perlu mengatur pekerjaan cron di cpanel yang memanggil URL (di server yang sama) seminggu sekali. Saya akan menggunakan wget tetapi ternyata ini dinonaktifkan pada server bersama yang digunakan.

Apakah ada alternatif untuk wget ? Saya pernah mendengar bahwa curl dapat digunakan tetapi saya tidak tahu cara mengaturnya dalam perintah cron.

Juga, apa perintah untuk membuat cronjob tidak melakukan apa pun setelah selesai?

Setiap ide sangat dihargai!

davidhyland
sumber
1
Apa yang akan dilakukan wget jika Anda bisa menggunakannya?
user9517
Mengapa mereka mengizinkan ikal jika mereka menonaktifkan wget?
andol
@ Iain - itu diperlukan untuk memproses skrip PHP
davidhyland
@Andol - pertanyaan yang sangat bagus. begitulah adanya
davidhyland

Jawaban:

20

alih-alih menggunakan wget, curl bekerja seperti ini:

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

yang akan bekerja dengan cara yang sama seperti wget. jika ini adalah file php yang Anda luncurkan, apakah ada alasan Anda tidak dapat menjalankannya melalui interpreter php baris perintah seperti:

php -q /path/to/cron.php

sama pada permintaan server web dan seringkali akan bekerja lebih cepat dan tanpa batasan batas waktu tertentu saat dipanggil melalui server web / curl

anthonysomerset
sumber
Memanggil ikal seperti itu akan mencetak hasilnya ke stdout. Jika Anda ingin berperilaku setara dengan wget, dan menyimpan output ke nama file berdasarkan url, Anda juga ingin menambahkan flag --remote-name.
andol
apakah --silent berarti tidak ada respons atau keluaran?
davidhyland
1
Juga, memanggil skrip php dari baris perintah mungkin tidak selalu menghasilkan hasil yang sama. Selain kemungkinan konfigurasi yang berbeda, ada juga skenario skrip yang dijalankan sebagai pengguna yang berbeda. Semuanya tergantung pada pengaturan.
andol
Yah, saya dapat menggunakannya menggunakan "curl --silent domain.com/script.php > / dev / null 2> & 1" tetapi juga berfungsi dengan "curl -o --url domain.com/script.php > / dev / null 2> & 1 "apa bedanya?
davidhyland
1
Perintah pertama mengirim semua output ke / dev / null, yang kedua akan membuat file yang disebut -urldi direktori home pengguna yang menjalankan skrip, yang berisi output dari file php Anda, semua output lainnya ke / dev / null.
user9517
6

Jika ikal tersedia, Anda dapat mencoba sesuatu seperti

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

Itu akan menyebabkan ikal menjadi benar-benar hening sehingga Anda tidak mendapatkan email apa pun darinya saat selesai.

user9517
sumber
4
Saya akan merekomendasikan menggunakan opsi --show-error juga, jadi diam untuk operasi normal tetapi akan menghasilkan kesalahan jika itu terjadi.
emerino
5

Saya menyarankan untuk menambahkan parameter "-m" di samping --silent karena parameter ini menetapkan waktu maksimum yang diizinkan untuk transfer. Bayangkan Anda memanggil cron setiap menit dan skrip membutuhkan waktu 2 menit - ini dapat berdampak buruk pada beban server atau hal-hal lain.

1 1 * * 0  /usr/bin/curl -m 120 -s http://example.come/some.php &>/dev/null
Johnny Vietnam
sumber