Difference between revisions of "Cron Job Issues"

From WHMCS Documentation

m
Line 1: Line 1:
 
{{troubleshooting}}
 
{{troubleshooting}}
  
This page details some of the common problems and errors which might occur when running the WHMCS cron job.
+
You may encounter some common problems and errors that can occur when running the WHMCS cron job.
  
 
==Troubleshooting==
 
==Troubleshooting==
There are several techniques available for troubleshooting problems which one may encounter with the cron job, in descending order of verbosity they are:
+
 
 +
There are several techniques available for troubleshooting the problems that you may encounter with the cron job. In descending order of verbosity, they are:
  
 
===Run the cron job in your browser===
 
===Run the cron job in your browser===
*Login to the WHMCS admin area, navigate to Setup > General Settings > Other tab
+
 
*Enable the '''Display Errors''' option
+
To do this:
*Visit the cron.php file in your browser, eg: http://www.yourdomain.com/whmcs/crons/cron.php
+
 
 +
*Log in to the WHMCS admin area and navigate to Setup > General Settings > Other tab.
 +
*Enable the '''Display Errors''' option.
 +
*Visit the <tt>cron.php</tt> file in your browser. For example:  
 +
<source lang="php">
 +
http://www.yourdomain.com/whmcs/crons/cron.php
 +
</source>
  
 
===Run the cron job from the server command line===
 
===Run the cron job from the server command line===
* Access your server command line
+
 
* Copy the cron job command for the cron.php file from your server's cron tab<source lang="php">crontab -u userName -l)</source>
+
To do this:
* Execute the command you copied:<source lang="php">php -q /path/to/whmcs/crons/cron.php</source>
+
 
 +
*Access your server's command line.
 +
*Copy the cron job command for the <tt>cron.php</tt> file from your server's cron tab<source lang="php">crontab -u userName -l)</source>
 +
*Execute the command you copied:<source lang="php">php -q /path/to/whmcs/crons/cron.php</source>
 
*Examine the output for any errors.
 
*Examine the output for any errors.
  
 
===Run the cron job from the server command line with debugging enabled===
 
===Run the cron job from the server command line with debugging enabled===
* Ensure that '''Display Errors''' is enabled in your admin area from the '''Setup > General Settings > Other''' tab
+
 
* Access your server command line
+
To do this:
* Confirm that '''display_errors''' is enabled in your command line PHP environment: <source lang="php">php -i | grep display_errors
+
 
 +
* Make sure you have enabled '''Display Errors''' in your admin area from the '''Setup > General Settings > Other''' tab.
 +
* Access your server's command line.
 +
* Make sure you have enabled '''display_errors''' in your command line PHP environment: <source lang="php">php -i | grep display_errors
 
display_errors => STDOUT => STDOUT</source>
 
display_errors => STDOUT => STDOUT</source>
* Copy the cron job command for the cron.php file from your server's crontab: <source lang="php">crontab -u userName -l</source>
+
* Copy the cron job command for the <tt>cron.php</tt> file from your server's crontab: <source lang="php">crontab -u userName -l</source>
 
* Add the '''all --force -vvv''' flags to the end of the cron command and execute it:<source lang="php">php -q /path/to/whmcs/crons/cron.php all --force -vvv</source>
 
* Add the '''all --force -vvv''' flags to the end of the cron command and execute it:<source lang="php">php -q /path/to/whmcs/crons/cron.php all --force -vvv</source>
*Examine the output for any errors
+
*Examine the output for any errors. The final line output should be "'''[OK] Completed'''".
*The final line output should be "'''[OK] Completed'''"
 
  
 
==Common Errors==
 
==Common Errors==
  
 
===Site error: the file /path/to/crons/cron.php requires the ionCube PHP Loader ioncube_loader_lin_5.6.so to be installed by the website operator===
 
===Site error: the file /path/to/crons/cron.php requires the ionCube PHP Loader ioncube_loader_lin_5.6.so to be installed by the website operator===
Seeing this error output indicates that the PHP configuration for your WHMCS installation may be different than that used for the command line.
 
  
Please try running the following command at the server command line whilst logged in as the same user under which the cron job is running to see the version information for your PHP and ionCube configuration:
+
Seeing this error output indicates that the PHP configuration for your WHMCS installation may be different than the one on the command line.
 +
 
 +
Log in as the same user that the cron job runs under. Then, run the following command at the server's command line to see the version information for your PHP and ionCube Loader® configuration:
  
 
<source lang="php">
 
<source lang="php">
 
php -v
 
php -v
 
</source>
 
</source>
 +
 
You should get an output along the lines of:
 
You should get an output along the lines of:
  
Line 46: Line 60:
 
</source>
 
</source>
  
If the "with the ionCube PHP Loader" line is absent, this indicates that the Ioncube loaders are not available for this user. Please work with your hosting provider or server administrator to ensure that the Ioncube loaders are available to the cron job user.
+
If the "with the ionCube PHP Loader" line is absent, this indicates that the ionCube loaders are not available for this user. Work with your hosting provider or server administrator to ensure that the ionCube loaders are available to the cron job user.
  
 
===Unable to communicate with the WHMCS installation===
 
===Unable to communicate with the WHMCS installation===
This error occurs when the cron.php file is unable to communicate with the WHMCS installation, its typically occurs when the location of the /crons directory [[Custom_Crons_Directory|has been customised]]. The cron.php file will look for the WHMCS directory in the location specified in the /crons/config.php file. So to To resolve this error:
 
  
* Open the /crons/config.php file
+
This error occurs when the <tt>cron.php</tt> file is unable to communicate with the WHMCS installation. This typically occurs when you are [[Custom_Crons_Directory|using a custom location]] for the <tt>/crons</tt> directory. The <tt>cron.php</tt> file will look for the WHMCS directory in the location that you specified in the <tt>/crons/config.php</tt> file. To resolve this error:
* Ensure the $whmcspath line is uncommented by removing the preceding // characters.
+
 
* Ensure the path specified on the $whmcspath is the full system path to your WHMCS directory. This is the directory which contains the init.php and clientarea.php files.
+
* Open the <tt>/crons/config.php</tt> file.
* Once completed, the entire file will look like this:
+
* Ensure the <tt>$whmcspath</tt> line is uncommented by removing the preceding <tt>//</tt> characters.
 +
* Ensure the <tt>$whmcspath</tt> path is the full system path to your WHMCS directory. This is the directory that contains the <tt>init.php</tt> and <tt>clientarea.php</tt> files.
 +
 
 +
When you finish, the entire file will look like this:
  
 
<source lang="php">
 
<source lang="php">
Line 81: Line 97:
  
 
===Could not open input file:  /path/to/crons/cron.php ===
 
===Could not open input file:  /path/to/crons/cron.php ===
This error occurs when the cron.php file is not present in directory path specified. Check the path specified, and correct it as required, or, ensure the cron.php file is present, if it is not.
+
 
 +
This error occurs when the <tt>cron.php</tt> file is not present in specified directory path. Check the path and correct it, or ensure the <tt>cron.php</tt> file is present.
  
 
===Oops! Something went wrong and we couldn't process your request===
 
===Oops! Something went wrong and we couldn't process your request===
This indicates a fatal PHP error has occurred. Navigate to 'Setup -> General Settings -> Other' and tick 'Display Errors', then run the cron again and the full error should be shown. The error can be a multitude of things but normally indicate an issue with one or more modules, which should be referenced. An example of what you may see is:
+
 
 +
This indicates that a fatal PHP error has occurred. Navigate to 'Setup -> General Settings -> Other' and select 'Display Errors'. Then, run the cron job again. The system will display the full error. The error normally indicates an issue with one or more modules.  
 +
 
 +
For example, you could see:
 +
 
 
<source lang="php">
 
<source lang="php">
 
<p class="debug">exception 'Whoops\Exception\ErrorException' with message 'Cannot redeclare class module_class' in /home/whmcs/public_html/modules/gateways/module-name/module-file.php:16<br />
 
<p class="debug">exception 'Whoops\Exception\ErrorException' with message 'Cannot redeclare class module_class' in /home/whmcs/public_html/modules/gateways/module-name/module-file.php:16<br />
 
</source>
 
</source>
If the error referenced is a third party module you are using, you will need to contact the developer(s) of the module to review and resolve the error. If the error reference is a WHMCS developed and shipped module, please contact our Support Team. It may also indicate an issue with the PHP configuration, and you will find the most common errors with the configuration in this documentation, such as the ones below.
+
 
 +
If the error references a third party module you are using, you will need to contact the developers of the module to review and resolve the error. If the error references a WHMCS-developed and shipped module, contact our Support Team. It may also indicate an issue with the PHP configuration. For more information, see the sections below.
  
 
===Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 20480 bytes)===
 
===Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 20480 bytes)===
This error indicates the cron is being terminated as it is hitting a 'memory_limit' of 32M. You will need to increase this to 64M (128M if possible) to resolve this. Please contact your server administrator or hosting provider for assistance with this.  
+
 
You can check the limit set using this command:
+
This error indicates that the system is terminating the cron job because it has exceeded the 'memory_limit' value of 32 MB. Increase this to 64 MB (128 MB if possible) to resolve this. Contact your server administrator or hosting provider for assistance with this.  
 +
 
 +
You can check the limit using this command:
 +
 
 
<source lang="php">
 
<source lang="php">
 
php -ini | grep "memory_limit"
 
php -ini | grep "memory_limit"
Line 98: Line 123:
  
 
===The file /path/to/crons/cron.php is corrupted===
 
===The file /path/to/crons/cron.php is corrupted===
This error can observed in version 7.5 and above. This error will occur if you are running Ioncube Loaders version 10.0 or earlier. WHMCS 7.5 requires Ioncube Loaders 10.1.0 or above. If your WHMCS installation is working, as described above, it indicates that the PHP configuration for your WHMCS installation may be different than that used for the command line. To check this, you can again use the command below:
+
 
 +
You may see this error in version 7.5 and above. This error will occur if you are running ionCube Loader version 10.0 or earlier. WHMCS 7.5 requires ionCube Loaders 10.1.0 or above. If your WHMCS installation is working, it indicates that the PHP configuration for your WHMCS installation may be different than the one that you use on the command line. To check this, you can again use the command below:
 +
 
 
<source lang="php">
 
<source lang="php">
 
php -v  
 
php -v  
 
</source>
 
</source>
Look for the following line to identify the ionCube loader version:
+
 
 +
Look for the following line to identify the ionCube Loader version:
 +
 
 
<source lang="php">
 
<source lang="php">
 
with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v10.2.0, Copyright  
 
with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v10.2.0, Copyright  
 
(c) 2002-2018, by ionCube Ltd.
 
(c) 2002-2018, by ionCube Ltd.
 
</source>
 
</source>
 +
 
===Error: Call to undefined function curl_init()===
 
===Error: Call to undefined function curl_init()===
This error indicates your PHP configuration is missing the 'curl' extension, you can check if this is missing using the command below:
+
 
 +
This error indicates that the system is terminating the cron job because the 'curl' extension is missing. To check this, run the following command:
 +
 
 
<source lang="php">
 
<source lang="php">
 
php -m
 
php -m
 
</source>
 
</source>
 +
 
A similar error may also occur if the 'curl_init' function is a disabled function in your PHP configuration.
 
A similar error may also occur if the 'curl_init' function is a disabled function in your PHP configuration.
  
 
===Whoops\Exception\ErrorException' with message 'Maximum execution time of 30 seconds exceeded===
 
===Whoops\Exception\ErrorException' with message 'Maximum execution time of 30 seconds exceeded===
This error indicates the cron is being terminated as it is hitting a 'max_execution_limit' of 30 seconds. This will need to be increased depending on the size of your installation. A limit of '120' would suffice for most installations, but some may need '300'. The current limit can be checked with this command:
+
 
<source lang="php">
+
This error indicates that the system is terminating the cron job because it has exceeded the 'max_execution_limit' value of 30 seconds. Increase this to an appropriate value for the size of your installation. For most servers, a limit of '120' is sufficient, but larger servers may need a value of '300'.  
php -ini | grep "max_execution_time"
+
 
</source>
+
You can check the limit using this command:
 +
<source lang="php">php -ini | grep "max_execution_time"</source>
  
 
===Segmentation fault===
 
===Segmentation fault===
This error is not something directly related to the WHMCS software and can occur for multiple different reasons. It most commonly indicates a PHP crash is occurring and would suggest there is an issue with your PHP installation, for example a malfunctioning extension. It is something your server admin/hosting provider would need to investigate, using the 'strace' utility for example.
+
 
 +
This error is not directly related to the WHMCS software and can occur for many different reasons. It most commonly indicates that PHP is crashing and suggests there is an issue with your PHP installation (for example, a malfunctioning extension). It is something your server administrator or hosting provider would need to investigate, possibly using the 'strace' utility.
  
 
===Domain renew link in emails is broken===
 
===Domain renew link in emails is broken===
Under some PHP/Server configurations the correct URL for the domain renew link in domain renewal reminder emails is generated incorrectly.
 
  
This can usually be fixed by using the correct PHP binary on your cronjob, or you can adjust the cronjob to work-around the issue by formatting your cron command as:
+
Under some PHP server configurations, the system generates the URL for the domain renewal link in domain renewal reminder emails incorrectly.
 +
 
 +
You can usually fix this by using the correct PHP binary on your cron job. Alternatively, you can adjust the cron job to work around the issue by formatting your cron command, as in the following example:
  
 
<source lang="php">
 
<source lang="php">

Revision as of 16:09, 29 April 2020

You may encounter some common problems and errors that can occur when running the WHMCS cron job.

Troubleshooting

There are several techniques available for troubleshooting the problems that you may encounter with the cron job. In descending order of verbosity, they are:

Run the cron job in your browser

To do this:

  • Log in to the WHMCS admin area and navigate to Setup > General Settings > Other tab.
  • Enable the Display Errors option.
  • Visit the cron.php file in your browser. For example:
http://www.yourdomain.com/whmcs/crons/cron.php

Run the cron job from the server command line

To do this:

  • Access your server's command line.
  • Copy the cron job command for the cron.php file from your server's cron tab
    crontab -u userName -l)
  • Execute the command you copied:
    php -q /path/to/whmcs/crons/cron.php
  • Examine the output for any errors.

Run the cron job from the server command line with debugging enabled

To do this:

  • Make sure you have enabled Display Errors in your admin area from the Setup > General Settings > Other tab.
  • Access your server's command line.
  • Make sure you have enabled display_errors in your command line PHP environment:
    php -i | grep display_errors
    display_errors => STDOUT => STDOUT
  • Copy the cron job command for the cron.php file from your server's crontab:
    crontab -u userName -l
  • Add the all --force -vvv flags to the end of the cron command and execute it:
    php -q /path/to/whmcs/crons/cron.php all --force -vvv
  • Examine the output for any errors. The final line output should be "[OK] Completed".

Common Errors

Site error: the file /path/to/crons/cron.php requires the ionCube PHP Loader ioncube_loader_lin_5.6.so to be installed by the website operator

Seeing this error output indicates that the PHP configuration for your WHMCS installation may be different than the one on the command line.

Log in as the same user that the cron job runs under. Then, run the following command at the server's command line to see the version information for your PHP and ionCube Loader® configuration:

php -v

You should get an output along the lines of:

PHP 5.4.43 (cli) (built: Aug 2 2015 02:44:35)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
with the ionCube PHP Loader v4.7.5, Copyright (c) 2002-2014, by ionCube Ltd.

If the "with the ionCube PHP Loader" line is absent, this indicates that the ionCube loaders are not available for this user. Work with your hosting provider or server administrator to ensure that the ionCube loaders are available to the cron job user.

Unable to communicate with the WHMCS installation

This error occurs when the cron.php file is unable to communicate with the WHMCS installation. This typically occurs when you are using a custom location for the /crons directory. The cron.php file will look for the WHMCS directory in the location that you specified in the /crons/config.php file. To resolve this error:

  • Open the /crons/config.php file.
  • Ensure the $whmcspath line is uncommented by removing the preceding // characters.
  • Ensure the $whmcspath path is the full system path to your WHMCS directory. This is the directory that contains the init.php and clientarea.php files.

When you finish, the entire file will look like this:

<?php
/**
 * Custom Crons Directory Configuration
 *
 * This crons folder may be moved to any place above or below the docroot.
 *
 * We recommend locating it outside the docroot to prevent browser based access.
 *
 * Upon moving it, you must provide the path to your WHMCS installation to
 * allow the cron task files to communicate with the parent WHMCS installation.
 *
 * To do this, rename this file config.php, then uncomment and enter the full
 * path to the WHMCS root directory in the $whmcspath variable below.
 *
 * You must also provide the appropriate path to the crons folder in the
 * $crons_dir variable inside the WHMCS master configuration file.
 *
 * For more information please see http://docs.whmcs.com/Custom_Crons_Directory
 */

$whmcspath = '/home/username/public_html/whmcs/';

Could not open input file: /path/to/crons/cron.php

This error occurs when the cron.php file is not present in specified directory path. Check the path and correct it, or ensure the cron.php file is present.

Oops! Something went wrong and we couldn't process your request

This indicates that a fatal PHP error has occurred. Navigate to 'Setup -> General Settings -> Other' and select 'Display Errors'. Then, run the cron job again. The system will display the full error. The error normally indicates an issue with one or more modules.

For example, you could see:

<p class="debug">exception 'Whoops\Exception\ErrorException' with message 'Cannot redeclare class module_class' in /home/whmcs/public_html/modules/gateways/module-name/module-file.php:16<br />

If the error references a third party module you are using, you will need to contact the developers of the module to review and resolve the error. If the error references a WHMCS-developed and shipped module, contact our Support Team. It may also indicate an issue with the PHP configuration. For more information, see the sections below.

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 20480 bytes)

This error indicates that the system is terminating the cron job because it has exceeded the 'memory_limit' value of 32 MB. Increase this to 64 MB (128 MB if possible) to resolve this. Contact your server administrator or hosting provider for assistance with this.

You can check the limit using this command:

php -ini | grep "memory_limit"

The file /path/to/crons/cron.php is corrupted

You may see this error in version 7.5 and above. This error will occur if you are running ionCube Loader version 10.0 or earlier. WHMCS 7.5 requires ionCube Loaders 10.1.0 or above. If your WHMCS installation is working, it indicates that the PHP configuration for your WHMCS installation may be different than the one that you use on the command line. To check this, you can again use the command below:

php -v

Look for the following line to identify the ionCube Loader version:

with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v10.2.0, Copyright 
(c) 2002-2018, by ionCube Ltd.

Error: Call to undefined function curl_init()

This error indicates that the system is terminating the cron job because the 'curl' extension is missing. To check this, run the following command:

php -m

A similar error may also occur if the 'curl_init' function is a disabled function in your PHP configuration.

Whoops\Exception\ErrorException' with message 'Maximum execution time of 30 seconds exceeded

This error indicates that the system is terminating the cron job because it has exceeded the 'max_execution_limit' value of 30 seconds. Increase this to an appropriate value for the size of your installation. For most servers, a limit of '120' is sufficient, but larger servers may need a value of '300'.

You can check the limit using this command:

php -ini | grep "max_execution_time"

Segmentation fault

This error is not directly related to the WHMCS software and can occur for many different reasons. It most commonly indicates that PHP is crashing and suggests there is an issue with your PHP installation (for example, a malfunctioning extension). It is something your server administrator or hosting provider would need to investigate, possibly using the 'strace' utility.

Domain renew link in emails is broken

Under some PHP server configurations, the system generates the URL for the domain renewal link in domain renewal reminder emails incorrectly.

You can usually fix this by using the correct PHP binary on your cron job. Alternatively, you can adjust the cron job to work around the issue by formatting your cron command, as in the following example:

cd /path/to/crons/ && php -q cron.php