Как использовать curl в работе cron?

12

Мне нужно настроить работу cron в cpanel, которая вызывает URL (на одном и том же сервере) один раз в неделю. Я собирался использовать wget, но оказалось, что это отключено на используемом общем сервере.

Есть ли альтернатива wget ? Я слышал, что curl можно использовать, но я не знаю, как настроить это в команде cron.

Кроме того, что команда заставить cronjob ничего не делать по завершении?

Любые идеи с благодарностью!

davidhyland
источник
1
Что бы сделал wget, если бы вы могли его использовать?
user9517
Зачем им разрешать скручивание, если они отключили wget?
андол
@Iain - необходимо обработать скрипт PHP
davidhyland
@Андол - очень хороший вопрос. вот только как это
davidhyland

Ответы:

20

вместо использования wget, curl работает так:

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

который будет работать так же, как wget. если вы запускаете php-файл, есть ли причина, по которой вы не можете запустить его через интерпретатор php командной строки, например:

php -q /path/to/cron.php

То же самое по запросу веб-сервера и часто будет работать намного быстрее и без определенных ограничений по времени ожидания при вызове через веб-сервер / curl

anthonysomerset
источник
Вызов curl таким образом выведет результат на стандартный вывод. Если вы хотите вести себя эквивалентно wget и сохранить вывод в имя файла на основе URL, вы также хотите добавить флаг --remote-name.
андол
означает --silent, что нет ответа или вывода?
Дэвидхилэнд
1
Кроме того, вызов сценария php из командной строки может не обязательно дать тот же результат. В дополнение к возможности различной конфигурации существует также весьма распространенный сценарий запуска сценария от имени другого пользователя. Все зависит от настроек.
андол
Ну, я получил его на работу с помощью «завиток --silent domain.com/script.php > / DEV / нуль 2> & 1» , но он также отлично работает с «завиток -o --url domain.com/script.php > / dev / null 2> & 1 "в чем разница?
Дэвидхилэнд
1
Первая команда отправляет все выходные данные в / dev / null, вторая создает файл с именем -urlв домашнем каталоге пользователя, выполняющего скрипт, который содержит выходные данные вашего php-файла, все остальные выходные данные отправляются в / dev / null.
user9517
6

Если есть завиток, вы можете попробовать что-то вроде

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

Это должно привести к тому, что curl будет полностью молчать, поэтому вы не получите от него письма по завершении.

user9517
источник
4
Я бы порекомендовал также использовать опцию --show-error, поэтому он не работает для нормальной работы, но в случае ошибки выдаст ошибку.
Emerino
6

Я бы предложил добавить параметр "-m" в дополнение к --silent, так как этот параметр устанавливает максимальное время, разрешенное для передачи. Представьте, что вы вызываете cron каждую минуту, а сценарий занимает 2 минуты - это может плохо повлиять на нагрузку на сервер или другие вещи.

1 1 * * 0  /usr/bin/curl -m 120 -s http://example.come/some.php &>/dev/null
Джонни Вьетнам
источник