web-dev-qa-db-fra.com

Est-ce que WGET arrive à expiration?

J'exécute un script PHP via Cron en utilisant Wget, avec la commande suivante:

wget -O - -q -t 1 http://www.example.com/cron/run

Le script prend au maximum 5 à 6 minutes pour effectuer son traitement. Est-ce que WGet l'attend et lui donne tout le temps dont il a besoin, ou va-t-il disparaître?

72
Click Upvote

Selon la page de manuel de wget , il existe plusieurs options liées aux délais d'attente - et il existe un délai d'attente de lecture par défaut de 900 secondes -, donc je dis que, oui, le délai d'attente pourrait être dépassé.


Voici les options en question:

-T seconds
--timeout=seconds

Définissez le délai d'attente du réseau sur secondes secondes. Ceci équivaut à spécifier --dns-timeout, --connect-timeout, et --read-timeout, Tout en même temps.


Et pour ces trois options:

--dns-timeout=seconds

Définissez le délai d'expiration de la recherche DNS sur secondes secondes.
Les recherches DNS qui ne se terminent pas dans le délai spécifié échoueront.
Par défaut, il n'y a pas de délai d'expiration pour les recherches DNS, autre que celui implémenté par les bibliothèques système.

--connect-timeout=seconds

Définissez le délai de connexion sur secondes secondes.
Les connexions TCP dont l'établissement prend plus de temps seront abandonnées.
Par défaut, il n'y a pas de délai de connexion autre que celui implémenté par les bibliothèques système.

--read-timeout=seconds

Définissez le délai de lecture (et d'écriture) sur secondes secondes.
Le "temps" de ce délai correspond au temps d'inactivité: si, à un moment quelconque du téléchargement, aucune donnée n'est reçue pendant plus que le nombre de secondes spécifié, la lecture échoue et le téléchargement est redémarré.
Cette option n’affecte pas directement la durée de tout le téléchargement.


Je suppose qu'en utilisant quelque chose comme

wget -O - -q -t 1 --timeout=600 http://www.example.com/cron/run

doit s’assurer qu’il n’ya pas de délai d’expiration avant la fin de votre script.

(Ouais, c'est probablement la solution la plus brutale possible ^^)

131
Pascal MARTIN

Le délai d'attente par défaut est de 900 secondes. Vous pouvez spécifier un délai d'expiration différent.

-T seconds
--timeout=seconds

La valeur par défaut est de réessayer 20 fois. Vous pouvez spécifier différents essais.

-t number
--tries=number

lien: document wget man

30
hIpPy

Étant donné que dans votre question, vous dites que c'est un script PHP, la meilleure solution serait peut-être simplement d'ajouter dans votre script:

ignore_user_abort(TRUE);

De cette manière, même si wget se termine, le script PHP continue à être traité au moins jusqu’à ce qu’il ne dépasse pas max_execution_time limite (directive ini: 30 secondes par défaut).

Selon wget vous ne devez en aucun cas modifier le délai d’expiration, conformément au manuel UNIX, le délai d’expiration par défaut de wget est de 900 secondes (15 minutes) , qui est beaucoup plus grand que les 5-6 minutes dont vous avez besoin.

6
Marco Demaio

Avant la version 1.14, les arguments de délai d'expiration wget n'étaient pas respectés si le téléchargement via https était dû à un bug .

5
Dean Rather