выполнить долгосрочную команду удаленно удаленно со следующими возможностями: < /p>
[*] Мы можем убить задачу с помощью его pid < /li>
Если задача завершена, его исходной код должен быть написан на файл < /li>
Запуск. /> (streck gule) Stderr и Stdout должны использовать линейные буферизации, так как они записываются в файл < /li>
< /ol>
Для моего использования, несколько случаев этой задачи будут запущены одновременно на разных серверах. Тем не менее, все серверы (включая сервер запуска) будут использовать один и тот же рабочий каталог (он монтирован в одном и том же месте на всех серверах). < /P>
Выпуск < /h2>
На данный момент я могу удовлетворить первые 3 требования. Задача - это программа C ++ с именем Main , и мы можем предположить, что относительный путь от $ home до нашего рабочего каталога - это kory_directory_path . В текущем решении используются два вспомогательных сценария (
Код: Выделить всё
run.shВо -первых, команда ssh :
Код: Выделить всё
$ ssh {server} "cd {wdpath}; ./run.sh"
Код: Выделить всё
#!/bin/bash
nohup ./helper.sh &>/dev/null &
echo $! > process.pid
Код: Выделить всё
#!/bin/bash
./main > process.stdout 2> process.stderr
echo $? > process.status
< /code>
Это, кажется, работает, но есть несколько вещей, которые мне не нравятся. < /p>
Я должен создавать 2 временных сценариев на дистанционное вызов, так как каждый вызов основного < /code> будет кормить некоторые командные аргументы, которые различаются (и мне нужно будет корректировать имена вывода). nohup ПИД, который я записываю, на самом деле не принадлежит к основному процессу , но его родительская оболочка.>
Подробнее здесь: https://stackoverflow.com/questions/797 ... nd-cleanup
Мобильная версия