вообще «в классике» схема такая:
1. демон открывает файл и пишет в него лог
2. логротейт делает логфайлу mv и отсылает демону сигнал, например SIGHUP
3. У демона есть для этого обработчик который ЛИБО переоткрывает файл ЛИБО делает seek(0)
Т.к. в вашем случае нет возможности контролировать файловый дескриптор, решение напрашивается само собой — написать или найти готовый «прокси» в который будет перенаправляться вывод и который сможет ловить сигналы и переоткрывать файл.
exec("my_daemon | my_proxy --out=/my/log/file")
Можно не сигнал а, например, touch какого то файла. Но сигнал эффективнее и проще.
Вот еще пример
hg.python.org/cpython/file/2145593d108d/Lib/logging/handlers.py#l358 тут сравниваются inode файла каждый раз перед записью.
PS: а разве nohup что-то пишет в stderr/out???