2013-08-27 5 views
0

J'essaie de synchroniser les dossiers entre mon serveur distant et amazon s3 en utilisant la commande système via une page web php. La page Web a l'option pour parcourir le dossier qui doivent synchroniser entre le serveur et s3système s3cmd sync php timeout

La commande s3 est en dessous d'un

système

('s3cmd synchronisation. Fldr_name de $ « . » .BUCKET_NAME. ' --config = "'. AWS_CONF_FILE. '"', $ Return);

Pour les petits dossiers, cela fonctionne. Mais je suis en train de synchroniser la connexion de pages Web de gros fichiers est en cours de réinitialisation.

J'ai essayé sur mon script php

ignore_user_abort (true);

Mais pas de chance. Est-il possible de rendre la page Web exécutable pendant longtemps?

Merci,

+0

vous pouvez essayer 'nohup' – bansi

Répondre

0

L'approche que vous utilisez n'est pas idéale. La connexion au serveur peut être réinitialisée pour plusieurs raisons quand elle reste ouverte longtemps, et que certaines d'entre elles sont hors de votre contrôle.

Je vous suggère de prendre une autre approche à ceci:

file d'attente toutes ces tâches de synchronisation sur le serveur et seulement exécuter deux d'entre eux en parallèle en utilisant un service qui fonctionne en arrière-plan (par exemple l'emploi cron ou autre).

Lorsque l'une de ces synchronisations se termine, vous enregistrez son succès/échec dans une base de données. Puis, dans l'interface utilisateur, vous tirez régulièrement un deuxième service (via des appels AJAX exécutés à intervalles réguliers) qui vérifie la base de données et renvoie l'indicateur pending/success/failure que vous stockez. Si la demande est toujours en attente, vous devez simplement revérifier plus tard.

+0

Merci de répondre. J'ai déjà un script cron à synchroniser entre mon dossier. Mais ce que je crée est un processus exigeant qui signifie que si un utilisateur doit synchroniser le dossier immédiatement, il peut utiliser cette page Web. Pour cela, je crée celui-ci. – Anish

+0

Vous pouvez toujours le faire sur demande avec l'approche que j'ai suggérée si votre service d'arrière-plan est averti quand quelque chose est ajouté à la file d'attente ou qu'il vérifie cette file d'attente à de très petits intervalles de temps. Si vous utilisez votre approche d'origine et que plusieurs utilisateurs demandent simultanément une synchronisation à la demande, certaines de ces synchronisations échoueront probablement en raison de problèmes de dépassement de délai. En outre, sur de longues connexions ouvertes, la connexion peut être fermée en raison d'un problème avec le réseau de votre utilisateur et dans ce scénario, il ne verra jamais si la synchronisation a réussi ou échoué. – dcro

+0

ok. Ensuite, je pense à l'implémentation avec l'interface utilisateur basée sur nohup et ajax. Mais seule chose que l'utilisateur ne recevra pas l'alerte sur l'écran. Pour cela, je peux envoyer une notification par email. – Anish