web-dev-qa-db-fra.com

script php non exécuté par crontab

J'ai configuré un cron pour exécuter l'un de mes scripts php. Mais le problème est que le script php n'est pas exécuté du tout, même partiellement.

Voici le cron que j'ai mis en place

45 23 * * * /usr/bin/php -q /var/www/myscript.php

J'ai essayé le suivant

  1. J'ai supprimé le cron de l'utilisateur normal à l'utilisateur root toujours aucun résultat.
  2. J'ai changé les permissions sur le script en utilisant chmod +x /var/www/myscript.php
  3. J'ai utilisé la commande whereis php il donne ce qui suit

    php: /usr/bin/php /usr/share/man/man1/php.1.gz
    

Maintenant, je ne sais pas ce que je peux faire d'autre. S'il vous plaît aider.

P.S. Je peux exécuter le script manuellement et il fonctionne parfaitement.

2
Tarun

1. Comme man php nous dit ...

   --no-header
   -q             Quiet-mode. Suppress HTTP header output (CGI only).

   --file file
   -f file        Parse and execute file

-q ne fait pas quoi que ce soit en mode php-cli. Comme d'autres l'ont fait remarquer, vous avez besoin de -f.

2. + x n'est pas requis.

Retournez-le avec:

chmod -x /var/www/myscript.php

3. whereis vous donnera tous les emplacements. Si vous voulez seulement le binaire, utilisez which php.

$ which php
/usr/bin/php
4
Oli

Voir man cron et les modifications spécifiques à Debian. Citation:

> Comme décrit ci-dessus, les fichiers sous ces répertoires doivent être soumis à certaines vérifications de sécurité, notamment: être exécutable, appartenir à root, ne pas être accessible en écriture par groupe ou autre et, si des liens symboliques, pointer vers des fichiers appartenant à root. De plus, les noms de fichier doivent être conformes aux exigences de nom de fichier des parties d'exécution: ils doivent être entièrement composés de lettres, de chiffres et ne peuvent contenir que les signes spéciaux traits de soulignement ('_') et traits d'union ('-'). Tout fichier non conforme à ces exigences ne sera pas exécuté par les parties d'exécution. Par exemple, tout fichier contenant des points sera ignoré.

0
Brian

Je me contente de deviner, mais le chemin où vous placez le script ne devrait pas être

45 23 * * */usr/bin/php /var/www/html/myscript.php

je suis toujours un débutant à cron :)

0
Dexobox

La bonne ligne de crontab serait:

45 23 * * * /usr/bin/php -f /var/www/myscript.php

Notez le -f au lieu de -q!

0
Frantique