Немного подумав, предположим, что у вас есть , чтобы иметь этот журнал там, где вы хотите, до завершения сценария ...
set -x # log *this* process
tmp=$(mktemp) # make a throwaway filename
python run.py args 2>$tmp 1>&2 & # log in bg to $tmp
until [[ -d path/to/ ]]; do sleep 1; done # wait for dir to exist
ln $tmp path/to/log.txt && # hard link log where you need it
rm $tmp # clean the temp if successful
Предполагается, что path/to/
находится на том же устройстве, что и /tmp/
. Если нет, вам нужно создать временное местоположение, которое равно на том же устройстве, потому что весь смысл этого упражнения в том, что это hard ссылка , не символическая ссылка. После создания ссылки вы можете удалить первый путь, и все будет так, как если бы вы писали во второе местоположение пути все время. Данные по-прежнему будут находиться в том же файле с тем же расположением диска и номером инода, на который будет ссылаться новое имя через желаемый путь.
c.f. это руководство , особенно # 10 внизу.
Обратите внимание, что я записал в журнал и stderr. Вы будете хотеть это большую часть времени, в том же журнале или в одном из его собственных. Обратите внимание, что я на самом деле перенаправил stderr в журнал, а затем dup'd stdout в stderr - это может стоить вам эффективности буферизации, но может избавить вас от головной боли, связанной с ошибочными строками, вызванными отдельно буферизованными потоками, записанными на один и тот же вывод.