Hi,
I am authenticating to the UNIX server using the below statements:-
proc printto log='C:\Temp\sastest.log' new;
run;
%let remote=lwstv21.__8015; signon remote=&remote cscript='C:\Script\tcpunix93.scr';
data _null_;
time_slept=sleep(20,1);
tday=today();
current=time();
put 'Execution time : ' current=time. tday date9. ;
run;
signoff;
proc printto;
run;
My userid and password details are already in the tcpunix93.scr file and this script has been automated.
But I need to make some changes in the code such that if the signon fails it retries signing on 2 more times . I dont want to read the log file everytime since it will bring much overhead to the code. Please suggest me a way to achieve this requirement.Thanks!
An alternative to @Kurt_Bremser's approach could be using macro and using the RLINK function (untested):
%macro repeat_signon ( remote = &remote
,repeat = 3);
%let rc = 0;
%let I = 0;
%do %until(&I = &repeat or &rc ne 0);
%let I = %eval(&I+1);
signon remote=&remote cscript='C:\Script\tcpunix93.scr';
data _null_;
remote_session = optgetc(“&remote”);
Msg = sysmsg();
put msg = remote_session =;
rc=rlink(remote_session);
if rc = 0 then put 'No link exists.';
else put 'A link exists.';
call symputx(‘rc’, put(rc,2.));
run;
%end;
%mend repeat_signon;
%repeat_signon (remote =%str(lwstv21.__8015));
The best place to do this is the .scr file that controls the logon process (C:\Script\tcpunix93.scr in your case). The syntax for this file is described in the SAS/CONNECT documentation.
You will have to manually replay the logon process with telnet so you can see the responses you get from the remote server; you can then code corresponding reactions into the .scr file.
I did that to catch the "password expired" message delivered by AIX and consequently prompt the user for a new password.
An alternative to @Kurt_Bremser's approach could be using macro and using the RLINK function (untested):
%macro repeat_signon ( remote = &remote
,repeat = 3);
%let rc = 0;
%let I = 0;
%do %until(&I = &repeat or &rc ne 0);
%let I = %eval(&I+1);
signon remote=&remote cscript='C:\Script\tcpunix93.scr';
data _null_;
remote_session = optgetc(“&remote”);
Msg = sysmsg();
put msg = remote_session =;
rc=rlink(remote_session);
if rc = 0 then put 'No link exists.';
else put 'A link exists.';
call symputx(‘rc’, put(rc,2.));
run;
%end;
%mend repeat_signon;
%repeat_signon (remote =%str(lwstv21.__8015));
Hi @SASKiwi,
The code is giving below error:-
68
ERROR 68-185: The function OPTGETC is unknown, or cannot be accessed.
2883 Msg = sysmsg();
2884 put msg = remote_session =;
2885 rc= rlink(remote_session);
-----
68
ERROR 68-185: The function RLINK is unknown, or cannot be accessed.
2886 if rc = 0 then put 'No link exists.';
2887 else put 'A link exists.';
2888 call symputx('rc', put(rc,2.));
2889 run;
Sorry, most SCL functions work in the DATA step but obviously not that one. Perhaps try @BrunoMueller's suggestion in the same macro:
%macro repeat_signon ( remote = &remote
,repeat = 3);
%let rc = 99;
%let I = 0;
%do %until(&I = &repeat or &rc = 0);
%let I = %eval(&I+1);
signon remote=&remote cscript='C:\Script\tcpunix93.scr' CMACVAR = signonrc;
%let rc = &signonrc;
data _null_;
remote_session = optgetc(“&remote”);
Msg = sysmsg();
put msg = remote_session =;
if symget('rc') = 0 then put 'A link exists.';
else put 'A link does not exist.';
run;
%end;
%mend repeat_signon;
%repeat_signon (remote =%str(lwstv21.__8015));
The rlink() function is only present in SCL, so it won't be of much help outside a DMS SAS. An one would need to have SAS/AF licensed to build a SCL program.
Hi
Check the doc for SIGNON Statement and Command. The SIGNON statement provides the CMACVAR option to name a macro variable that will tell you the follwoing:
Value
|
Description
|
---|---|
0 |
The sign-on is complete.
|
1 |
The sign-on failed.
|
2 |
You have already signed on to the current server session.
|
3 |
The sign-on is in progress.
|
Thanks @BrunoMueller
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.