Скажем, у меня есть следующие документы в каталоге,
> dir()
# [1] "master.job" "master.R" "P1.job" "P2.job" "P1.R" "P2.R"
master.job
отправлено в pbs для передачи master.R
, P1.job
для источника P1.R
, P2.job
для источника P2.R
и т.д. ... Источник master.R
время от времени создает новые Px.job
и Px.R
и отправляет новое задание, созданное с помощью команды (в R) system("qsub Px.job")
.master.R
действует как процесс мониторинга верхнего уровня и определяет, когда создавать и отправлять новые задания.
При подключении к кластеру с использованием SSH я могу просто вызвать R в консоли, а затем использовать команду:
> source("master.R")
И процесс запускается без проблем.Но таким образом мне придется оставить свой компьютер включенным, потому что, как только я отключусь от сервера, процесс будет убит.Поэтому мне нужно отправить работу master.job
в pbs для моей цели.Однако, когда я сделал это таким образом, я столкнулся со следующей ошибкой при достижении шага system("qsub Px.job")
:
socket_connect_unix не удалось: 15137
qsub: невозможно подключиться к серверу (null) (errno = 15137) не удалось подключиться к trqauthd
Есть предложения?Ясно, что я могу отправить задание через консоль R (либо system("qsub Px.job")
или source("master.R")
), но тогда почему не получается отправить то же задание (Px.job
) через другой процесс R (master.R
)Когда он вызывается по заданию (master.job
)?
Я совершенно уверен, что кто-то спросит, зачем мне делать что-то подобное.
В начале ябыло только одно задание: P.job
, источники P.R
.P.R
- это исходный код, который неоднократно вызывает другую проприетарную программу X. В программе X есть ошибка, которая не устранена в текущей версии, где в некоторых точках она зависает навсегда .Когда он замораживается, P.R
не сможет его обнаружить (я также не могу внести никаких изменений в программу X).Поэтому мне нужен другой отдельный, независимый процесс, переданный в pbs, который может (1) уничтожить (с qdel
) отправленное задание P.job
(и, следовательно, P.R
), когда дисковый ввод-вывод в определенных каталогах отсутствует для определенногоколичество времени, (2) проверить ход выполнения и (3) повторно отправить еще один P.job
(который получит еще один P.R
) в соответствии с ходом выполнения.