Cron shell et OVH

Par stada, il y a 10 ans


Bonjour !

J'ai un site basé sur Cakephp 3 sur un mutualisé OVH.
J'ai deux scripts shell à exécuter dans tes tâches CRON. Le seul problème c'est qu'OVH n'autorise que les fichiers PHP pour définir une tâche dans son panel admin.
Du coup j'ai essayé de lancer une commande via SSH mais ça ne semble pas fonctionner... Voici ce que j'ai tenté :
crontab -e 0 cd /home/site/public_html/app && bin/cake myshell

J'obtiens une erreur en me disant que crontab n'est pas défini. Et je tente avec sudo j'obtiens "can't stat etc/sudoers" et "no valid sudoers sources found".

Des idées?

Merci ! :)

15 réponses

Huggy, il y a 10 ans

Bonjour,
L'interface d'OVH permet de lancer des batch shell, il suffit de mettre autre plutot que php
bien sûr ton script doit avoir les droits d'exécution et être formaté UNIX (lf et non pas crlf)

stada, il y a 10 ans

Bonjour,

Merci de l'info. Et si je sélectionne directement le fichier Shell : src/Shell/FichierShell.php pour la tâche Cron il va le prendre en compte de la même manière que la commande bash?

Huggy, il y a 10 ans

je pense qu'en créant un fichier .sh executable

#!/bin/bash cd /chemin_absolu_myshell /chemin_absolu/bin/cake myshell myparam

le chemin absolu, tu peux l'avoir en tapant pwd
Je ne connais pas assez bien Cakephp pour savoir ce que fait le binaire cake

stada, il y a 10 ans

Ah oui je vois. Merci du conseil je vais essayer! J'ai mis les droits 704, tu crois que ça suffira?

Lartak, il y a 10 ans

Bonjour.
Un fichier sh ne change rien s'il ne peut définir que des fichiers php pour utiliser les tâches cron.
Il n'a d'après la documentation de OVH pour les hébergements mutualisés, que la possibilité d'utiliser les tâches cron que depuis son manager, il lui est donc inutile de créer un script dans un fichier sh.
Par contre stada, n'oublies pas une chose qui est indiqué dans la documentation :

À savoir : vous pouvez exécuter une tâche, au maximum une fois par heure.

stada, il y a 10 ans

Bonjour,
Merci pour la précision.
Du coup quelle serait la solution pour exécuter ces commandes si le fichier sh ne convient pas?

Merci :)

Lartak, il y a 10 ans

Du coup quelle serait la solution pour exécuter ces commandes si le fichier sh ne convient pas?

Commences déja par dire ce à quoi va servir tes deux tâches et si elles sont liées, c'est à dire si tu y fait appel en même temps (si elles se déclenchent à la même heure et avec la même périodicité).

stada, il y a 10 ans

Une tâche vérifie l'état d'une transaction et l'autre envoie une notification. Elles peuvent être décalées d'une heure chacune ça ne pose pas de problème.

Huggy, il y a 10 ans

Les fichiers .sh fonctionnent très bien en tache cron, même pour les hébergements 'perso' (je fais mes sauvegardes comme ça)
lorsqu'on crée une tache, c'est l'heure de la création qui fixe les minutes et la tache ne peux s'exécuter qu'une fois par heure au maximum.
Rien n'empêche de recréer une autre tache qui fait la même chose X minutes après.

Lartak, il y a 10 ans

Les fichiers .sh fonctionnent très bien en tache cron, même pour les hébergements 'perso' (je fais mes sauvegardes comme ça)

Dans ce cas là je n'ai rien dit, c'est juste qu'il avait annoncé :

Le seul problème c'est qu'OVH n'autorise que les fichiers PHP pour définir une tâche dans son panel admin.

stada, il y a 10 ans

J'obtiens une erreur dans les logs:
line 2: bin/cake: Permission denied

Les droits sont à 715.

Huggy, il y a 10 ans

Tu parles des droits de ton fichier .sh
il faut regarder aussi les droits du fichier binaire cake
sinon 715 c'est ok

stada, il y a 10 ans

J'ai bien suivi ton conseil et j'ai mis les bons droits pour le binaire cake. Voici les erreurs que j'obtiens à présent :
[2016-04-04 09:33:03] <b>Warning</b>: Unexpected character in input: '\' (ASCII=92) state=1 in <b>/home/www/site/bin/cake.php</b> on line <b>33</b><br />
[2016-04-04 09:33:03] <b>Parse error</b>: syntax error, unexpected T_STRING in <b>/home/www/site/bin/cake.php</b> on line <b>33</b><br />

Ma version globale PHP est 5.6.

Huggy, il y a 10 ans

Désolé , j'ai cru que cake était un binaire mais c'est en fait un shell qui lance cake.php en mode phpcli
tu trouveras ici les infos sur phpcli
pour ta version php 5.6, ça devrait être /usr/local/php5.6/bin/php
il faut modifier le fichier bin/cake pour mettre le bon chemin

... exec /usr/local/php5.6/bin/php "$CONSOLE"/cake.php "$@" exit

et si on veut lancer cake.php directement

#!/usr/local/php5.6/bin/php -q <?php ...
stada, il y a 10 ans

exitcode 0 ! Ca a l'air tout bon, je te remercie pour ton aide! :)