You are currently browsing the monthly archive for June 2009.
The at
command can be used in CGI scripts to remotely trigger non-recurring jobs on a web server. This is especially useful for long running jobs that clients don’t need to wait on and jobs that need to persist across web daemon restarts.
My initial simple attempts to schedule a job with at
in a CGI script executed by an Apache webserver were met with the failure response “This account is currently not available
“. That message being the output of /sbin/nologin
which is the shell value set for the apache
user in /etc/password
.
The fix is to set the SHELL environment variable to a proper shell when executing at
. Here’s a simple, proof-of-concept CGI script.
use CGI;
my $cgi = new CGI;
print $cgi->header;
system(‘echo “/usr/bin/env > /tmp/apacheenv” | SHELL=/bin/bash at now’);
Calling the CGI script triggers the at
scheduling. In this case, the execution of /usr/bin/env
is immediate and successful.
SERVER_SIGNATURE=
SHELL=/bin/bash
HTTP_USER_AGENT=Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/528.18.1 (KHTML, like Gecko) Version/4.0 Safari/528.17
SERVER_PORT=80