PHP script does not run as cron job on Ubuntu Server

I've written a php script that creates a backup of a mysql database and set it to run daily using crontab on Ubuntu server, but the script is never executed (at least so it seems).

  • The script is called backup.php.
  • It generates a backup (sql within a gz archive) and stores it in folder /backup.
  • It adds a few lines of text to /backup/log.txt.
  • The script is called in crontab for root user like this (sudo crontab -e):

    * * * * * php -f /var/www/cmdb/backup.php
    

    (Time needs to be adjusted, but this is for testing purposes.)

    Nothing happens. No file gets created, no log gets modified.

    However, all of the following tests succeed:

  • Running the script directly in the console using php backup.php
  • Running cron job: * * * * * php -v > /var/www/cmdb/backup/php-v.txt
  • Running cron job: * * * * * php -f /var/www/cmdb/test.php > /var/www/cmdb/backup/text.txt (writing a string to a file)
  • I think these tests indicate that:

  • backup.php script works without error
  • Cron is running
  • The backup folder is writeable
  • PHP command is accessible from crontab
  • So, why isn't backup.php doing anything when run from crontab?


    As seen in the comments, the problem lied in the paths within your script: you wanted to use /var/www/cmdb/backup and just wrote backup because you assumed it was fine since the script runs in the same directory.

    So, in general, never assume paths in your scripts from crontab: cron runs under a very limited environment and its running path is normally /root or just / . So whatever you have in your script make it use the full path.

    Or, otherwise, move to the path and then run the script:

    * * * * * cd /var/www/cmdb/ && php -f backup.php
    

    Could you try running the command directly from the command line to check output?

    php -f /var/www/cmdb/backup.php

    Could you try being explicit with the location of php?

    * * * * * /usr/bin/php -f /var/www/cmdb/backup.php

    链接地址: http://www.djcxy.com/p/66348.html

    上一篇: 为什么cron给我发送脚本的内容而不是运行它?

    下一篇: PHP脚本不能在Ubuntu服务器上作为cron作业运行