Lancer un script sans attendre son execution

Bonjour,
Je suis sur un mutu et je cherche à avoir un script qui en lance un autre et se termine sans attendre la fin de l'autre.

Le problème:
J'ai un Synology avec un tache planifiée (un cron) qui appel un script sur mon domaine.
Ce script met parfois autour de 20sec à s’exécuter. Et le timeout des cron sur le synology est de 15sec, donc çà renvoi une erreur, et parfois le syno relance même immédiatement la tache.

Donc je voudrai que le syno appel mon script, ce script en appel un autre qui exécute les taches un peu lourde, et retourne immédiatement un code 200 OK au syno. Je n'ai pas besoin de retour entre les deux scripts.

J'ai essayé avec çà:

`exec('/usr/local/bin/php '.$path.' >/dev/null &');`

Mon site à été bloqué pour spoofing, 403 sur tous le site !

J'ai aussi essayé avec une requête curl et un timeout court, puis curl_close:
Sur le script appellé par le syno:

function asyncCall($url)
{
$curlHdl = curl_init();
curl_setopt($curlHdl, CURLOPT_URL, $url);
curl_setopt($curlHdl, CURLOPT_FRESH_CONNECT, true);
curl_setopt($curlHdl, CURLOPT_RETURNTRANSFER, false);
curl_setopt($curlHdl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curlHdl, CURLOPT_TIMEOUT_MS, 200);

curl_exec($curlHdl);
curl_close($curlHdl);
return true;
}

Et le script appellé par cette fonction:

ob_end_clean();
ignore_user_abort(true);
ob_start();
header("Connection: close");
header("Content-Length: " . ob_get_length());
ob_end_flush();
flush();
//traitement:

Mais çà ne semble pas marcher…

Y'a t il une solution, compatible OVH, pour lancer un script sans attendre ? Un fire-and-forget en fait.

Merci.


J'ai un Synology avec un tache planifiée (un cron) qui appel un script sur mon domaine. Ce script met parfois autour de 20sec à s’exécuter. Et le timeout des cron sur le synology est de 15sec, donc çà renvoi une erreur, et parfois le syno relance même immédiatement la tache.


J'ai des cron qui durent plusieurs minutes sur mon synology..

Tu fais quoi concrètement sur ton synology ?
As tu absolument besoin du code 200 ok ?

Dans le DSM, je mets une tache planifié, script utilisateur et comme tache:
curl 'mon url.php'

Au delà de 15sec, j'ai une interuption (56) et parfois la tache se relance une, voir deux fois.

Et si tu créer un script bas qui lui même lance curl ou wget ça ne conviendrait pas à ce que tu veux faire ?

Ah peu être, mais aucune idée comment faire.
Comment lance tu tes taches qui durent plusieurs minutes ?

Pour info j'ai webstation sur /Volume1/web/ (php sql etc)

Sur DSM
Panneau de configuration => Planificateur de taches > créer > taches planifiés script défini par l'utilisateur > PAramètres de la tache >Script défini par l'utilisateur
/volume1/public/script_cron.sh


et dans le fichier

#!/bin/bash
#

cd /volume1/public/
wget http://site.tld/le_lien.php
temps=`date +%d-%m-%Y-%Hh%Mm`
echo $temps' Le script a fini de s executer' >>./log_cron.log


tu peux remplacer wget par curl aussi.
ce qui donnerait
curl http://site.tld/le_lien.php

et il n'y a pas de timeout ni rien normalement.

Super merci j'essaye çà !!!

Je n'ai pas de dossier public, je l'ai mis dans volume1/web qui a tous les droit read/write,

/bin/bash^M: bad interpreter: No such file or directory

j'ai corrigé au dessus, il y avait une coquille à cause de >

Tu as bien mis les # ?

tu lances la commande à la main ? ou via le planificateur ?

J'avais enlevé les > :wink:

maintenant çà s'execute mais:
/volume1/web/cron_shutters.sh: line 3: $'\r': command not found
puis
connected.
HTTP request sent, awaiting response… 404 Not Found

pourtant l'url est bonne

est-ce que tu pourrais copier coller tout les logs ici et le fichier?
Tu les supprimeras si tu veux après.

C'est bon çà passe !!! des \r\n apperemment, réedité avec notedpa++ c bon

Merci !!!