diff options
Diffstat (limited to 'openEMS/matlab/FindFreeSSH.m')
-rw-r--r-- | openEMS/matlab/FindFreeSSH.m | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/openEMS/matlab/FindFreeSSH.m b/openEMS/matlab/FindFreeSSH.m new file mode 100644 index 0000000..8fd6c22 --- /dev/null +++ b/openEMS/matlab/FindFreeSSH.m @@ -0,0 +1,87 @@ +function host = FindFreeSSH(host_list, Settings, wait_time, command) +% function host = FindFreeSSH(host_list, Settings, wait_time, command) +% +% Find a free ssh host not running openEMS +% +% internal function used by RunOpenEMS +% +% host_list: give a list of possible host +% +% wait_time: wait x seconds after not finding a free host and rechecking +% default: 600 seconds +% +% command: unix command to check for free host (empty result --> free) +% default: 'ps -e | grep openEMS' +% +% See also RunOpenEMS +% +% openEMS matlab interface +% ----------------------- +% author: Thorsten Liebig + +if (nargin<4) + % command which should return an empty string if host is available + command = 'ps -e | grep openEMS'; +end + +% 10 seconds ssh timeout +time_out = 10; + +if (nargin<3) + wait_time = 600; +end + +if ~isunix + ssh_command = [Settings.SSH.Putty.Path '/plink ']; + ssh_options = [' -i ' Settings.SSH.Putty.Key]; + command = ['"' command '"']; +else + ssh_command = 'ssh'; + ssh_options = ['-o ConnectTimeout=' num2str(time_out)]; + command = ['''' command '''']; +end + +if ischar(host_list) + fid=fopen(host_list); + if (fid==-1) + error('FindFreeSSH: cant open host file'); + end + clear host_list; + host_list = {}; + while 1 + line = fgetl(fid); + if ischar(line) + host_list{end+1} = line; + else + break; + end + end + fclose(fid); +elseif ~iscell(host_list) + error('FindFreeSSH: unknown host list format'); +end + +while 1 + for n = 1:numel(host_list) + host = host_list{n}; + [status, result] = unix([ssh_command ' ' ssh_options ' ' host ' ' command ]); + if (isempty(result) && status==1) + disp(['FindFreeSSH:: found a free host: ' host ]); + return + elseif (~isempty(result) && status==0) + disp(['FindFreeSSH:: ' host ' is busy running openEMS ... ' ]); + else + disp(['FindFreeSSH:: shh connection to ' host ' failed ... ' ]); + end + end + + host = ''; + + if (wait_time<=0) + warning('openEMS:FindFreeSSH',' unable to find a free host '); + return + end + + disp([' no free host found waiting for ' num2str(wait_time) ' seconds ... ']) + pause(wait_time) +end
\ No newline at end of file |