Як я можу використовувати curl у роботі з кроном?


12

Мені потрібно налаштувати роботу cron у cpanel, який викликає URL-адресу (на тому ж сервері) раз на тиждень. Я збирався використовувати wget, але виявляється, це відключено на спільному сервері, який використовується.

Чи є альтернатива wget ? Я чув, що curl можна використовувати, але не знаю, як це встановити в команді cron.

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

Будь-які ідеї дуже оцінені!


1
Що б зробив wget, якби ти міг ним скористатися?
користувач9517

Навіщо вони дозволяти згортання, якщо вони відключили wget?
andol

@Iain - це потрібно для обробки сценарію PHP
davidhyland

@Andol - дуже гарне запитання. ось так воно і є
davidhyland

Відповіді:


20

замість використання wget, curl працює так:

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

який буде працювати так само, як і wget. якщо його файл PHP, який ви запускаєте, чи є причина, що ви не можете запустити його через інтерпретатор php командного рядка так:

php -q /path/to/cron.php

той самий на запит веб-сервера, і часто він буде працювати набагато швидше і без певних обмежень на час очікування, коли вони викликаються через веб-сервер / curl


Викликаючи curl таким чином, буде надруковано результат у stdout. Якщо ви хочете вести себе еквівалентно wget і зберегти висновок до імені файлу на основі URL-адреси, ви також хочете додати прапор --remote-name.
andol

чи означає -silent означає, що немає відповіді чи виходу?
davidhyland

1
Крім того, виклик скрипта php з командного рядка може не обов'язково давати той же результат. Крім можливості різної конфігурації, існує також нечастий сценарій запуску сценарію як іншого користувача. Все залежить від налаштування.
andol

Ну, я змусив його працювати за допомогою "curl --silent domain.com/script.php > / dev / null 2> & 1", але він також чудово працює з "curl -o --url domain.com/script.php > / dev / null 2> & 1 "в чому різниця?
davidhyland

1
Перша команда надсилає весь вихід у / dev / null, друга створить файл, який називається -urlв домашній директорії користувача, що виконує скрипт, який містить вихід вашого файлу php, весь інший вихід йде в / dev / null.
користувач9517

6

Якщо доступний завиток, ви можете спробувати щось на кшталт

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

Це повинно спричинити завивку повністю безшумною, тому ви не отримаєте жодного електронного листа після завершення.


4
Я рекомендую також скористатись опцією - show-error також, тому вона нормально працює, але при виникненні помилки вийде помилка.
Емеріно

6

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

1 1 * * 0  /usr/bin/curl -m 120 -s http://example.come/some.php &>/dev/null
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.