mirror of
https://github.com/sasjs/core.git
synced 2025-12-11 06:24:35 +00:00
feat: mp_wait4file macro
This commit is contained in:
37
base/mp_wait4file.sas
Normal file
37
base/mp_wait4file.sas
Normal file
@@ -0,0 +1,37 @@
|
||||
/**
|
||||
@file
|
||||
@brief Wait until a file arrives before continuing execution
|
||||
@details Loops with a `sleep()` command until a file arrives or the max wait
|
||||
period expires.
|
||||
|
||||
@example
|
||||
|
||||
Wait 3 minutes OR for /tmp/flag.txt to appear
|
||||
|
||||
%mp_wait4file(/tmp/flag.txt , maxwait=60*3)
|
||||
|
||||
@param [in] file The file to wait for. Must be provided.
|
||||
@param [in] maxwait= (0) Number of seconds to wait. If set to zero, will
|
||||
loop indefinitely (to a maximum of 46 days, per SAS [documentation](
|
||||
https://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a001418809.htm
|
||||
)). Otherwise, execution will proceed upon sleep expiry.
|
||||
@param [in] interval= (1) The wait period between sleeps, in seconds
|
||||
|
||||
|
||||
**/
|
||||
|
||||
%macro mp_wait4file(file, maxwait=0, interval=1);
|
||||
|
||||
%if %str(&file)=%str() %then %do;
|
||||
%put %str(ERR)OR: file not provided;
|
||||
%end;
|
||||
|
||||
data _null_;
|
||||
maxwait=&maxwait;
|
||||
if maxwait=0 then maxwait=60*60*24*46;
|
||||
do until (fileexist("&file") or slept>maxwait );
|
||||
slept=sum(slept,sleep(&interval,1));
|
||||
end;
|
||||
run;
|
||||
|
||||
%mend mp_wait4file;
|
||||
Reference in New Issue
Block a user