Автоматизируйте загрузку нескольких экранов Unix с помощью команд - PullRequest
0 голосов
/ 30 августа 2018

Мне нужно запустить 20 экспериментов параллельно. Для каждого я загружаю новый unix screen, затем в этой загрузке среду anaconda, а затем запускаю скрипт на python с аргументом для этого эксперимента.

Рабочий процесс выглядит так:

> screen -S exp01
> source activate myenv
(myenv) > python process_experiment 01
> screen -S exp02
> source activate myenv
(myenv) > python process_experiment 02

Есть ли способ написать скрипт для его автоматизации?

1 Ответ

0 голосов
/ 31 августа 2018

Согласно этому вопросу , вы можете отправлять нажатия клавиш на сеанс screen следующим образом:

screen -dmS new_screen sh
screen -S new_screen -X stuff "cd /dir
"
screen -S new_screen -X stuff "java -version
"

Вы можете написать небольшой скрипт оболочки (назовем его run-exp.sh), чтобы запустить эксперимент:

#!/bin/sh
source activate myenv
python process_experiment $1

А затем использовать цикл для запуска сеансов экрана, на которых выполняется этот сценарий:

#!/bin/sh
for i in $(seq -w 1 20); do
    screen -dmS exp$i
    screen -S exp$i -X stuff "./run-exp.sh $i
"
    # (The new line is necessary, not a mistake.)
done
...