The SYSTASK statement
enables you to execute host-specific commands from within your SAS
session or application. Unlike the X statement, the SYSTASK statement
runs these commands as asynchronous tasks, which means that these
tasks execute independently of all other tasks that are currently
running. Asynchronous tasks run in the background, so you can perform
additional tasks while the asynchronous task is still running.
For example, to start
a new shell and execute the UNIX
cp
command
in that shell, you might use this statement:
systask command "cp /tmp/sas* ~/archive/" taskname="copyjob1"
status=copysts1 shell;
The return code
from the
cp
command is saved in the macro
variable COPYSTS1.
The output from the
command is displayed in the SAS log.
Because the syntax between
UNIX and a PC can be different, converting PC SAS jobs to run on UNIX
might result in an error in the conversion process. For example, entering
the following command results in an error:
systask command "md directory-name" taskname="mytask";
An
error occurs because
md
is a “make
directory” command on a PC, but has no meaning in UNIX. In
the conversion process,
md
becomes
mkdir
.
You must use the SHELL option in the SYSTASK statement because
mkdir
is
built into the UNIX shell, and it is not a separate command as it
is on a PC.
SAS writes the error
message to the log.
Note: Program steps that follow
the SYSTASK statements in SAS applications usually depend on the successful
execution of the SYSTASK statements. Therefore, syntax errors in some
SYSTASK statements will cause your SAS application to abort.
There are two types
of asynchronous processes that can be started from SAS:
All tasks started with
SYSTASK COMMAND are of type Task. For these tasks, if you do not specify
STATVAR or STATE, then SYSTASK LIST displays the task name, type,
and state, and the name of the status macro variable. You can use
SYSTASK KILL to kill only tasks of type Task.
Tasks started from
SAS/CONNECT with the SIGNON statement or command and RSUBMIT statement
are of type SAS/CONNECT Process. To display SAS/CONNECT processes,
use the LISTTASK statement to displays the task name, type, and state.
To terminate a SAS/CONNECT process, use the KILLTASK statement. For
information about SAS/CONNECT processes, see the SAS/CONNECT User's Guide.
Note: The preferred method for
displaying any task (not just
SAS/CONNECT processes) is to use the
LISTTASK statement instead of SYSTASK LIST. The preferred method for
ending a task is using the KILLTASK statement instead of SYSTASK KILL.
The SYSRC macro variable
contains the return code for the SYSTASK statement. The status variable
that you specify with the STATUS option contains the return code of
the process started with SYSTASK COMMAND. To ensure that a task executes
successfully, you should monitor both the status of the SYSTASK statement
and the status of the process that is started by the SYSTASK statement.
If a SYSTASK statement
cannot execute successfully, the SYSRC macro variable will contain
a nonzero value. For example, there might be insufficient resources
to complete a task or the SYSTASK statement might contain syntax errors.
With the SYSTASK KILL statement, if one or more of the processes cannot
be killed, SYSRC is set to a nonzero value.
When a task is started,
its status variable is set to NULL. You can use the status variables
for each task to determine which tasks failed to complete. Any task
whose status variable is NULL did not complete execution. If a task
terminates abnormally, then its status variable will be set to
–1
.
For more information
about the status variables, see WAITFOR Statement: UNIX.
Unlike the X statement,
you cannot use the SYSTASK statement to start a new interactive session.