supprimer une tache cron avec un php appelé par cron

  • Auteur de la discussion Auteur de la discussion migli
  • Date de début Date de début
Nouveau WRInaute
Voilà mon souci : j'ai créé une tâche cron en utilisant un script php, en tant qu'utilisateur (pas en root).

Cette tâche lance une page php, qui va faire des trucs, et quand elle a fini je voudrais que la tâche soit supprimée de cron.

Problème : c'est cron qui lance le fichier php, et quand j'essaie d'effacer la tâche (à la fin du php, avec exec), j'ai un problème de droits, ou d'accès, ou je sais pas quoi.

Je précise que si je lance le php avec un navigateur, il supprime bien la tâche.

J'ai essayé :

Code:
exec('crontab -u nonutilisateur -l', $oldCrontab);

et je reçois :
Code:
sh: /crontab: No such file or directory

(j'espère être clair, je ne suis pas sûr).

Quelqu'un peut m'aider ??

Merci.
 
Nouveau WRInaute
effectivement, il doit y avoir un problème soit d'autorisation, soit de chemin d'accès, ou autre chose dont je n'ai pas idée, mais j'ai vérifié les chmod, je n'ai pas de solution pour l'instant.
 
WRInaute accro
Pourquoi supprimer ton cron ? Un cron est utilisé pour des taches répétitives. Si c'est pour exécuter une tâche une seule fois, il existe d'autres méthodes.

Explique ce que tu veut faire parce que la, IMHO, tu ne dois pas faire les choses de la meilleure manière.
 
Nouveau WRInaute
il s'agit d'une newsletter à envoi différé. Lorsqu'elle est envoyée, je la supprime pour qu'elle ne reparte pas l'année d'après !
 
WRInaute accro
Eh bien l'idée serait alors quelque chose comme :

- Ton cron détecte qui a reçu la dernière newsletter. Si tout le monde l'a reçue, tu n'envoie rien.
- Si quelqu'un n'a pas reçu la dernière newsletter, tu la lui envoie.

Lorsque tu envoie une nouvelle newsletter, tu signale à ton cron (en ajoutant ta newsletter en base de données par exemple) qu'il y a une nouvelle newsletter.
Il l'enverra alors à tous les abonnés.

Un outil que tu ne pourra pas utiliser car ce n'est pas du php mais dont tu pourra t'inspirer au niveau de la conception, c'est delayed_job.
http://github.com/tobi/delayed_job/tree/master

Lorsqu'il y a quelque chose à faire, le cron l'exécute. Sinon il s'arrête simplement.
Une action peut être l'envoi de cette newsletter.

Mais ce qui est sur, c'est que supprimer un cron via le script php, c'est pas une bonne méthode architecturale.
 
Nouveau WRInaute
Merci beaucoup !

J'ai déjà un script qui envoie ces newsletters en ajax dans le cas d'envoi immédiat. Par contre l'excellente idée que je n'ai pas eue avant (...!) est simplement de marquer la newsletter 'envoyée' dans la base de données. Seul inconvénient : le cron va trainer plein de taches inutiles qu'il relancera tous les ans.

Si je ne trouve pas de solution pour supprimer les crons après execution, j'adopterai celle-ci qui en tout cas fonctionne.

N'y a-t-il pas simplement une instruction à ajouter (style ' #!/usr/bin/...????') qui permette d'accéder au fichier cron depuis php, puis le modifier ?
 
WRInaute accro
Pourquoi le cron trainerait-il des tâches inutiles ?? Une fois que ta tâche est terminée, le processus se tue tout seul.
 
WRInaute accro
C'est un cron exécuté une seule fois de toute façon ? Pourquoi faire un cron alors ? Exécute la tâche manuellement. Ca sera plus simple.
 
WRInaute accro
Sinon tu as la solution d'utiliser ton cron pour interroger une table où se situent les dates auxquels ta newsletter doit être envoyé. Si lors du passage du CRON, une date inférieure où l'envoi n'a pas été fait (dans ce cas-là ta table doit inclure un flag dont l'état change lorsque toutes les newsletter sont parties) est présente dans la table, tu exécutés le script d'envoi.
 
Nouveau WRInaute
[RESOLU]Re: supprimer une tache cron avec un php appelé par cron

Merci à tous, j'ai trouvé d'où venait le problème : il fallait simplement désactiver le safe_mode de php
 
Discussions similaires
Haut