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?
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 ^^)
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
É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.
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 .