Usar exec com & faz pouco sentido (embora isso não seja a fonte do seu problema), isso não salvará nenhuma bifurcação extra. Com componentes de pipe, só consigo ver salvando um fork com o shell zsh , mas somente se aplicado no último componente do pipe ( cmd1 | exec cmd2 , e isso significa que zsh não aguarda mais pelos outros componentes do pipe).
Aqui, você não está redirecionando o stderr do script python para ts , embora esteja enviando-o para o arquivo log . Você provavelmente iria querer:
su -s /bin/sh -c '
"$0" "$@" 2>&1 |
ts "[%Y-%m-%d %H:%M:%S]"
' user -- test.python "$FULLPATH" > log 2>&1 &