Назад | Перейти на главную страницу

nohup несколько последовательных команд не регистрируют вывод

У меня есть скрипт 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) & вот что происходит:

  1. Оболочка работает $(...) который возвращает строку Start time ... а потом
  2. Работает nohup Start time ... что явно не работает, потому что такой команды нет Start.

поскольку nohup можно запустить только одну команду, это обычное решение:

~ $ nohup sh -c "python test.py; python test.py" &

Так ты бежишь sh в nohup а затем выполняет нужные команды.