Save 15% on Instant Deploy Bare-Metal Servers in 26 Global Markets with Coupon Code: EdgeSave

How To Troubleshoot Your CGI Scripts – Internal Server Error 500

If you try to use a CGI script on your web page and you get an Internal Server Error 500, this means that the CGI script did not execute properly. There are several causes that can generate this error, so a few things will need to be checked. 

 

STEP 1: Check Permissions and Group Ownership

To start, you’ll want to check the /var/log/httpd/suexec_log. The log contains any errors that would result from not having correct permissions set on the file.

The file needs to be in a cgi-bin and must have the owner/group as the username who owns the site. If it’s owned be anyone else, it will not run. Also, the script must have execute permission.

The most common chmod permission is 755 (or rwxr-xr-x). You’ll need to go through all your directories from the public_html down to the directory the script is in, making sure that all permissions are set to 755 (*Note: public_html can be 750 *only* if it has a group of apache).

 

If Using a Hivelocity Server (Special Requirements)

If you’re one of our customers and you’re experiencing an Internal Server Error 500 on your CGI scripts, then it might be due to missing requirements specific to our servers. The Apache Server software that we run on our Hivelocity web servers has certain group ownership and permissions requirements for CGI scripts. Please check to see that your script meets the following requirements:

  • The directory the CGI script resides in must not be writable by other or by group users.
     
  • The CGI script itself must not be writable by other or by group users.
     
  • CGI script must not have the setuid bit set.
     
  • You must call SSI execs by their full pathname. For example, if you are running a UNIX command located on the web server it would look something like this:
     
    <!--#exec cmd="/usr/bin/date"-->

    If you are running a script that is in your pcgi-bin, it might look something like this for corp-web customers:
     
    <!--#exec cmd="/htdocs/youruserid/pcgi-bin/bar.pl"-->

    and like this for cheap-web and personal web customers:

    <!--#exec cmd="/htdocs/userdirs/youruserid/pcgi-bin/bar.pl"-->

  • The target userid may not be < 100 and the target gid may not be < 20. This rule only affects staffers’ CGI scripts. Staffers must chgrp their scripts to group users or some other group.
     
  • The minimum permissions for CGI scripts is mode 500. For CGI compiled programs, the minimum permissions is mode 100. You can of course grant more permissions if you wish. 
     
  • The minimum permissions for server-parsed-html (.shtml) files is mode 004 (readable by other), and exec files included therein must be at least mode 700 for scripts and mode 500 for binaries.

 

STEP 2: Troubleshooting your CGI Script

If you’ve checked the suexec_log and it only shows the script being run, then it might not be an issue with permissions. The cause of the error may be within the script code itself.

The easiest way to figure out script coding problems is to first run the script manually from an ssh prompt. You can do that using a variation of the following commands:

cd /home/username/domains/domain.com/public_html/cgi-bin

./script.cgi

One common error is the use of an incorrect interpreter. The two most common interpreters are:

#!/usr/bin/perl

and

#!/usr/local/bin/php

This code must appear on the first line of the script.

Sometimes, a file is uploaded in Windows format causing the trailing newline (return) character to form incorrectly. In this instance, the file would need to be re-uploaded in a different format.

Another error that could be generated when running the script manually from ssh would be missing perl modules. If you’re missing perl modules, you’ll need to install them manually. Using CPAN (The Comprehensive Perl Archive Network) is the easiest method to install new perl modules. This can be done with the following command:

eg: perl -e shell -MCPAN install Bundle::DBD::mysql

 

Need More Personalized Help?

If you have any further issues, questions, or would like some assistance checking on this or anything else, please reach out to us from your my.hivelocity.net account -> Support and provide your server credentials within the encrypted field for the best possible security and support.

If you are unable to reach your my.hivelocity.net account or if you are on the go, please reach out from your valid my.hivelocity.net account email to us here at: support@hivelocity.net. We are also available to you through our phone and live chat system 24/7/365.

 

Additional Links:

Looking for more information on Internal Server Error 500? Search our Knowledge Base!  

In need of more great content? Interested in cPanel, Private Cloud, or Colocation? Check out our recent posts for more news, guides, and industry insights!

Share on Twitter
Share on Facebook