У меня есть скрипт python (выполнение которого занимает много времени), который мне нужно запустить несколько раз, меняя параметры. И это выполняется на удаленной машине. Для примера и тестовых целей возьмите следующий скрипт test.py
:
import time
print("\nStart time: {}".format(time.ctime()))
time.sleep(10)
print("End time: {}".format(time.ctime()))
Для этого я обычно использую nohup
. Он отлично работает с одним выполнением, используя следующую команду:
nohup test.py &
Выходы правильно сохранены в nohup.out
файл. Чтобы запустить последовательность, я провел небольшое исследование и нашел [этот вопрос] [1], и я придумал следующую команду:
nohup $(python test.py; python test.py) &
Что отлично работает. Я запустил команду, быстро вышел из системы, снова зашел и увидел htop
выполняется первое выполнение, затем завершается, а затем начинается второе. Но проблема в том, что вывод не был сохранен в nohup.out
файл. Если я жду в терминале завершения обоих выполнений, отображается следующая ошибка:
nohup: не удалось выполнить команду "Пуск": нет такого файла или каталога
Что я здесь делаю не так?
PS: Мне нужно регистрировать результаты, потому что мне нужно видеть текущий прогресс скрипта и знать, какая ошибка произошла, если она не завершилась должным образом. Итак, если есть другая команда, которую можно использовать вместо nohup
который может регистрировать python print
тоже будет приветствоваться.
В $(...)
разрешается сначала, только потом nohup
. Т.е. когда ты бежишь nohup $(python test.py; python test.py) &
вот что происходит:
$(...)
который возвращает строку Start time ...
а потом nohup Start time ...
что явно не работает, потому что такой команды нет Start
.поскольку nohup
можно запустить только одну команду, это обычное решение:
~ $ nohup sh -c "python test.py; python test.py" &
Так ты бежишь sh
в nohup
а затем выполняет нужные команды.