Я написал небольшую функцию, но почему-то не работает должным образом.
У меня есть соединение с сервером, и иногда сервер не работает, поэтому я не могу подключиться.Сценарий выполняется в пакетном режиме, поэтому я должен его автоматизировать.
Сценарий должен успешно выполнить conn <- function(..)
(это означает отсутствие сообщения об ошибке), если не restart/re-check
, и перезапустить снова через прибл.1 мин.Это должно работать в цикле, пока соединение не будет установлено примерно 12 часов.(Прибл.).Соединение должно быть назначено объекту conn
, поэтому объект должен вернуть успешное соединение.(что-то вроде <Connection established, @ 20180522 20:43:41 CET>
Функция, которая не работает, находится здесь:
connect <- function(c) { message(paste("remaining run", c));
withRestarts(err <- tryCatch({ conn <- server.coonect(settings...) },
error=function(e) { invokeRestart("reconnect") }), reconnect = function() { message("re-connecting");
stopifnot(c > 0); for(i in 1:10) { Sys.sleep(6); cat(i) }; connect(c-1) }) }
connect(1000) # with approx. 1min sleep we get here over 12 hours running..
Итак, вопрос в том, что не так и как переписать функцию так, чтобы она работала, как ожидалось. Спасибо.
РЕДАКТИРОВАТЬ
Кажется, что функция должна быть:
connect <- function(c) { message(paste("remaining run", c));
withRestarts(err <- tryCatch({ server.coonect(settings...) },
error=function(e) { invokeRestart("reconnect") }), reconnect = function() { message("re-connecting");
stopifnot(c > 0); for(i in 1:10) { Sys.sleep(6); cat(i) } }) }
conn <- connect(1000)
РЕДАКТИРОВАТЬ 2
Вот комментарий к вышеупомянутой функции, которую я протестировал:
Я протестировал функцию EDIT, имитируя соединение, сначала запустив функцию без подключения к Интернету (теперь функция проверяет каждую 1:10 или 6 секунд, и после запуска функции я подключаюсь к Интернету, теперь я ожидаю, что функция в следующей итерации будет показана и подключится к серверу, если доступно ...), что происходит, когда функция не получает последующую возможностьподключить ...