2016-07-13 2 views
6

Я выполняю длинную работу, используя кластер компьютеров. Иногда процесс прерывается, и мне приходится вручную перезапускать. Существует значительный простои, когда перерывы происходят в одночасье. Мне было интересно, есть ли способ запустить сценарий супервизора в Julia, который контролирует, работает ли работа в другом экземпляре Julia. Он перезапустит процесс, если он будет прерван и завершится после завершения задания. К сожалению, я точно не знаю, как проверить, что процесс запущен, и как перезапустить процесс. Вот приблизительная идея:Как автоматически перезапустить длинную работу в Julia

state = true 
while state == true 
    #check every minute 
    sleep(60) 
    data = readcsv("outputfile.csv") 
    #read file to check if process is finished 
    if size(data,1) < N 
     #some function to check if the process is running 
     if isrunning() == true 
      #Do nothing.Keep running 
     else 
     #some function to spawn new instance of julia 
     #run the code 
      include("myscript.jl") 
     end 
    else 
     #Job finished, exit while loop 
     state = false 
    end 
end 

ответ

5

Правильный инструмент для правильного задания. Используйте оболочку командной строки. Если что-то оно безвременно прекращено, оно выдаст код состояния ошибки.

Например Bash

until julia myscript.jl; 
do echo "Failed/Interrupted. Restarting in 5s. Press Ctrl-C now to interrupt."; 
sleep 5; 
done` 

Потому что Джулия не unuable как бегун командной строки вы могли бы сделать, в джулия:

while true 
    try 
     run(`julia myscript.jl`) #Run a separate process 
     break 
    catch 
     println("Failed/Interrupted. Restarting in 5s. Press Ctrl-C now to interrupt.") 
     sleep(5) 
    end 
end 
Смежные вопросы