Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

I have setup a cron to execute one of my php scripts. But the problem is the php script is not being executed at all not even partially.

Here is the cron I have set up

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

I have tried the following

  1. I removed the cron from normal user to root user still no results.
  2. I changed the permissions on the script using chmod +x /var/www/myscript.php
  3. I have used the command whereis php it gives the following

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

Now, I don't know what else I can do. Please Help.

P.S. I can execute the script manully and it runs perfectly.

share|improve this question
    
Errors from scripts run by crontab should show up in your system logs or you should receive them as a local email. –  Gerald Schneider Aug 2 '13 at 9:35

4 Answers 4

up vote 2 down vote accepted

1. As man php tells us...

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

   --file file
   -f file        Parse and execute file

-q doesn't do anything in php-cli mode. As others have pointed out, you need -f.

2. +x is not required.

Revert it with:

chmod -x /var/www/myscript.php

3. whereis will give you all locations. If you just want the binary, use which php.

$ which php
/usr/bin/php
share|improve this answer

I am just taking a wild guess but shouldn't the path where you place the script be

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

i am still a newbie at cron :)

share|improve this answer

See man cron and the Debian-specific changes. Quote:

> As described above, the files under these directories have to be pass some sanity checks including the following: be executable, be owned by root, not be writable by group or other and, if symlinks, point to files owned by root. Additionally, the file names must conform to the filename requirements of run-parts: they must be entirely made up of letters, digits and can only contain the special signs underscores ('_') and hyphens ('-'). Any file that does not conform to these requirements will not be executed by run-parts. For example, any file containing dots will be ignored.

share|improve this answer

The correct crontab line would be:

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

Notice the -f instead of -q!

share|improve this answer
    
Thanks for the reply. Can you please let me know the difference between both. I mean -f and -q –  Tarun Aug 2 '13 at 8:17

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.