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
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.
my $cgi = new CGI;
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.
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